home *** CD-ROM | disk | FTP | other *** search
Text File | 2001-05-04 | 418.7 KB | 10,219 lines |
-
- ****************************************************************************
- Information Screens Upgrade
- ****************************************************************************
-
- For the next upgrade I will be doing fancy screen manipulation in order to
- achieve smooth scrolling AND to be able to utilize a wide range of
- different screens which will all use the exact same chunk of memory.
-
- This will allow the game to use a minimum amount of chipram and avoid memory
- fragmentation from constantly opening and closing screens.
-
- Using clever arrangement of the screen memory, we will be able to display
- e.g. 3 screens at once which will trash the display of all the other
- screens, but as those other screens won't be visible, noone will ever know.
- When switching back to the original display, the previous 3 screen display
- will be trashed, but as it will no longer be visible, nobody will ever
- know.
-
- Using this technique we can have a dozen different screens open at once,
- all using overlapping chipram. It will simply be a matter of pushing the
- correct screens to the front and using them to generate the proper display.
-
- In order for this technique to work, the screens must be in interleaved
- format because interleaved format utilizes memory more efficiently.
-
- Also, interleaved screens allow general blitter operations to be faster so
- hopefully all those DrawImage() calls will be a bit faster.
-
-
- Pointers:
-
- -------------------------------------------------------------------------
- Display1: NormalDisplay 320x256x6 main screen + 640x256x3 hires screen.
- 61440 bytes + 61440 bytes = 122880 bytes total
-
- Base=HiResScreen
- Base+ 61440 LoResScreen. (main map)
- -------------------------------------------------------------------------
-
- Display2: ScrollPanel1Display: 640x1024x4 autoscroll screen + 320x32x6 screen to display the icon.
- 327680 bytes + 7680 bytes = 335360 bytes.
-
- Base+7680=SP1SmallLoResScreen (320x32x6) (7680 bytes)
- Base+7680+7680=SP1HiResAutoScrollScreen(640x1024x4) (327680 bytes)
- -------------------------------------------------------------------------
-
- Create various other displays here...
-
-
-
- Base+7680 = LoresScreen on standard info panel.
- Base+7680+whatever = HiResScreen on standard info panel.
- Base+7680+whatever+whatever= HiResScrollingScreen on standard info panel.
-
-
-
- * 1: Change all screens to Interleaved. Make neccessary JC-code
- adjustments to open and setup the screens in interleaved mode. DONE.
- * 2: Change lores screen to be 64 colors and the shadowboard too. This
- prepares for the final and ultimate ECS version. DONE. Hmmm.. the
- quadrascopes are now slower.
- * 3: Adjust asm testpixel code to work with interleaved bitmaps and 64 colors.
- TestPixel4_320 is now TestPixel5_320 and it only works on Interleaved BitMaps
- with 6 bitplanes.
- TestPixel1_320 now only works on Interleaved Bitmaps of 6 bitplanes.
- ALL DONE.
-
- YIKERS! 64 color mode drains so much DMA time from the chipram that
- now if you move the mouse on the New Game? or End Turn? screens the gfx
- slow down dramatically! Perhaps these should be redone on 32 color
- screens for speed?
-
- * 4: Adjust asm DoTheHighlighting and UnDoTheHighlighting to work with the
- new 64 color interleaved screens. DONE.
-
- WOW! Pressing "l" for line of sight still goes at a nice fast speed
- even though it is testing an extra bitplane now and even though the
- available bandwidth for testing chipram has been cut in half.
-
- * 5: 64-bit aligned the double-buffering of the rotating pentagrams. DONE.
-
- * 6: REMOVED all that conditional OS 1.2 / 1.3 code from info.c.
-
- Display3: ScrollPanel2Display: same old way for now.
-
- Display4: FileRequesterScreen. Noninterleaved. For Loading and Saving.
-
- * 7: Allocate the screenmem as 1 big chunk then subdivide it in an
- overlapping manner for the various displays and screens.
- A. Allocate 1 chunk of 343040+4 bytes of chipram. (This is the largest
- chunk currently needed) 640x1024x4 + 7680+7680 DONE.
- B. Setup the bitmap pointers appropriately. DONE.
- C. Open up the 2 new screens. Put the 2 new ones in back for now. DONE
- D. Open the appropriate window on each screen. DONE.
-
- * 8. Install TypeSmith 2.5b. DONE.
- Ok, TypeSmith is really awesome because it can load and edit
- PostScript, Compugraphic, TrueType and Amiga Bitmap fonts!
- However, there is no way to see how the chars will actually look in
- their normal size while you are editing them so I had to use Deluxe Paint 5
- and keep switching screens back and forth. It worked ok. It is clear
- that TypeSmith was designed to edit scalable fonts rather than bitmap
- fonts. I needed a break from programming so I stayed up all night
- designing a bitmap script font that looks really GREAT!
-
- Unbelievably, there is no way to change the width of a bitmap
- character from within TypeSmith so I wrote my very first Arexx program!
- WOW! Arexx is totally kewl! The Arexx port on TypeSmith is very
- nice. I made a script in 8 minutes (including the time to look up the
- commands in the online help) that allows me to change the width of chars.
- It even worked perfectly on the first try!
-
- I was going to make the ChaosCalligraphy font be 44 points tall for use
- on the scroll info panels. This looks AMAZINGLY FANTABULOUS, but then
- I realized this would be too big for use on the standard info panels so I
- squished it down to 40 points so now it could theoretically be used on
- the standard info panels also. The 40 point font doesn't look as awesome
- as 44 but it still looks ok.
-
- * 9. Design Awesome Calligraphy Font: ChaosCalligraphy.font/40 9356 bytes DONE.
-
- *10. Implement new ScrollDisplayPanel1
- A. Correctly position the screens and print text to them using the
- same old font as always in order to test the AUTOSCROLLing.
-
- Ok, I have now wasted quite a few hours trying to get AUTOSCROLLing
- to work. The docs don't fully explain it. I finally figured it out
- after much trial and error. I now know how AUTOSCROLL works
- HOWEVER it is useless on a child screen because the scrolling is
- somehow constrained by the parent screen! Grrr.. I consider this
- to be a bug in the OS.
-
- AUTOSCROLLING isn't really required. But opening a LARGE screen
- which can be manually scrolled IS required. In each test where
- AUTOSCROLLING failed, manual scrolling failed also.
-
- So here are my options for making the AUTOSCROLL
- ScrollInformationPanel work:
-
- 1) Don't attach it to the parent screen. Then it works. The
- trouble is then there are 2 open screens in the system and that
- annoys people.
-
- 2) Do #1 but build in some amiga-m/n detection code into Chaos so
- that we automatically depth arranged BOTH screens at once. The
- trouble with this idea is #1: I don't know how to do it and #2
- I doubt if it would even work.
-
- 3) Try to open the parent screen with fake higher top so that it
- can move up higher. Thus the child screen will also be able to
- move higher. The trouble with this idea is I don't think you can
- just go around opening screens with fake tops. I would try this
- idea except for 1 MAJOR problem: when the parent screen becomes
- AUTOSCROLL in the future, having a fake top means it will AUTOSCROLL
- incorrectly! grrr.
-
- 4) Figure out some way to poke into the screen->viewport or
- whatever and force this to work by making it not be a child
- screen anymore or by changing the clip in the viewport or something??
- I TRIED THIS AND IT DIDN'T WORK. 8(
-
- 5) Make the SP1HiResAutoScrollScreen be the parent screen. If its
- the parent it should be able to AUTOSCROLL. The problem with
- this is that I don't think it will work because all the other
- child nondraggable screens will constrain it from scrolling off
- the top.
-
- 6) Constantly keep reopening and closing the scroll screens.
- It takes 25 frames (half a second) to open the 640x1024x4 screen
- and window. It takes 34 frames to open that screen/window + the
- SmallLoRes Screen and Window. This is entirely too long to wait.
-
- 7) Open 2 child screens of 640x512 each and flip between them when
- moving the mouse or pressing an arrow key.
-
- 8) Somehow use ScrollVPort() to do the scrolling on the 640x1024
- child screen. The problem with this is that experience has
- shown ScrollVPort to NOT BE FAST ENOUGH. AUTOSCROLL is
- PERFECTLY smooth and so is MoveScreen() but ScrollVPort() is
- screwed up.
-
- 9) Temporarily make SP1HiResAutoScrollScreen be the parent screen.
- This should allow it to autoscroll correctly. Then later on
- when the map becomes an AUTOSCROLL screen and the 2 screens
- conflict with each other, I'll just make the 2 SP1 screens into
- their own separate family. Thus there will then be 2 open
- screens in the system at that point.
- This might also necessitate making the HiResScreen be DRAGGABLE
- again. Hmmm...
- DONE.
-
- * NEW FUNCTION: RedrawRightHandSide() to redraw whatever needs to be
- redrawn on the right hand side of the map screen. (spell list or gadgets or
- whatever. DONE.
-
- B. Adjust colors. DONE.
- C. Implement Stefan Burstroem's FastTextFit.asm into the makefile.
- The only problem is there are no docs for the routine!
- I eliminated the TextExtent parameter since it was not used. DONE.
-
- * BUG: the FastTextFit asm code has a bug so that it usually returns 1
- higher than the correct result. NOW FIXED.
-
- D. Implement new 40 pt. calligraphy font on the new Scroll Info Panel.
- DONE.
- E. Rewrite the PRTPool() function so that the entire text is
- decompressed all at once into a buffer then that buffer must be processed
- using FastTextFit() to fit the text onto the screen 1 line at a time.
- I ended up completely rewriting printer.c. DONE.
- F. I had to change PRT_WIDTH to be 1025 DONE.
- G. Since I am rewriting printer.c I have converted it to JC. DONE.
-
- * BUG! My pearl.font TextAttr was using FPB_DISKFONT instead of the correct
- FPF_DISKFONT! This explains why the pearl.font never worked on my OS 1.3
- Amiga 2000 and why it never seemed to work on my dad's A500 or A3000.
- Using FPB_DISKFONT is equivalent to FPF_ROMFONT so it APPEARED to work on
- my computer because my preferences are set to use pearl.font as the default
- system font. This means that NOBODY has been seeing the correct font all
- this time except for me! ARRRGGHH!!! NOW FIXED.
-
- * December 16th: First panel of the new scroll display is finally ALL DONE.
- Most spell descriptions fit onto 1 screen with the small 40 point font so
- the AUTOSCROLLing is not usually used.
-
- *11. Implement new ScrollDisplayPanel2
- Hmmm.... How should I do this?
- A. Have another screen which is only 640x512 and display the info on
- that screen?
- B. Simply erase the autoscroll screen and display the data on it?
- C. Simply erase the bottom half of the autoscroll screen and display
- the data on the bottom half and smooth scroll it up?
- ARRGH I can never decide how to do these things!
-
- I guess I'll just do option A. DONE.
-
- * Utilized some trickery to stop the ScrollPanel1 from scrolling when there
- is only 1 screen of text. DONE.
-
- * Implement Anti-Aliased, Anti-Flicker text. Technically this is
- anti-flicker text, but it also partially antialiases too. DONE.
-
- * TOO SLOW: On my 25 Mhz 68030 it takes 65 frames to bring up the description
- of the Cobra. I added in some Mask stuff and rearranged the colors but it
- still takes 44 frames. It takes 5 frames to decompress the text, the
- other 39 frames are displaying the text in the dead slowest graphics mode
- of ECS.
-
- If anyone complains about it being to slow I can do one or more of the
- following:
- Use the fake 1 bitplane screen.
- Add an extra pixel between lines and use the BltBitMap() technique.
- Change to noninterleaved and write an asm routine to zap the text up real
- fast.
- Switch down to 8 colors?
- Design the font as a colorfont.
- Design the font as 2 fonts. 1 is the normal font an the other is just
- the antialiasing.
- Try a minterm of 0x77 or 0xEE
-
- I at least need to do the fake screen thing between SP1 and SP2 to cover
- up the sloppiness + speed it up greatly!
-
- * IMPLEMENTED: fake 1bpl screen at beginning of SP1 and again between SP1 and
- SP2. Damn it still takes 21 frames for the Cobra description. 35 frames
- for gooey blob!
-
- * DISABLED CLIPPING: during the text printing only. NO EFFECT. 8(
-
- * Tried JAM2 mode: NO EFFECT. 8(
-
- I could do this: Text() the text to a seperate bitmap buffer.
-
- move.l (bitmapbuffer)+,d0
- move.l d0, (FastRamBufferbpl1Y+1)+
- or.l d0, (FastRamBufferbplY-1)+
- That simple loop will generate the antialiasing.
-
- move.l d0,(FastRamBufferbpl2Y)+ ; to copy the main text also.
-
- Then just copy the bitplanes to the appropriate planes of the screen and
- that is all. Maybe I'll do something like this someday. But I'll
- probably never get around to it. It doesn't apply to gfx cards.
-
- * NEW POWERUPS shown on Info Screen: Crystal Ball, Ubiquiscope, Seismology,
- Cartography, Telescope, Alternography, Fly, Earthbind, Archery,
- Nonarchery, Lich/Convert/Materialize/Undead/NotUndead, Sword of Sassenrath,
- Mount, NoMount, NoGrow, StoneToFlesh, Inanimorphobiosis, FleshToStone.
-
- I intentionally left out Cursed Sword because its graphic currently looks
- identical to a regular Magic Sword.
-
- * PROBLEM: If the game locks up we can't just press CTRL-C to break into
- the program. I have now set it so CTRL-C will work in the developer
- version. DONE. hmmm... doesn't seem to have any effect.
-
-
- *12. Implement new InfoPanelDisplay1 IF -i option (InterlaceMode) is set have
- it in interlace else have it in non interlace, the old way.
-
- In other words leave the existing info panel 1 code intact. Just add
- in an IF (InterlaceMode) InformationPanelInterlace(); return;
- InformationPanelInterlace() will call the InformationPanelInterlace1();
- A. Open 2 new interlace screens with windows. DONE.
-
- *13. Implement new InfoPanelDisplay2 DONE.
-
- *14. Implement Antialiased text on the new IP1 displays DONE.
- (this requires a minimum of 16 colors)
-
- *15. Implement antialiased bargraph boxes to reduce flicker on 1084S monitors.
- DONE.
-
- *16. Implement color cycling on the new IP1 displays. Oops color clash.
- The original color cycling worked by cycling HIRESGREEN2, but this
- color is being used to display the owner. Ok I will use HALFHIRESBLACK
- and HALFHIRESGREEN1 for the color cycling colors.
-
- Or I might create yet another screen so that the creature name + owner
- can have its own 16 color pallette on ECS. Or its own 256 color pallette
- or whatever on AGA.
-
- COLOR CYCLING DONE.
-
- *17. Redo the halfIP1HiResColors to be halfway between the new darkblue
- background and the real color to reduce flicker. DONE.
-
- * PROBLEM: the cyan rectangular boxes flicker quite badly on a 1084S
- monitor even when antialiased. Solution: draw the rectangles in a darker
- color. DONE, but it strangely doesn't seem to reduce the flicker any.
- Its very difficult to keep long narrow horizontal lines from flickering
- in interlace.
-
- *18. ReImplement Level Editor into the new IP1 displays. DONE.
-
- * There is a hashing problem. I need to make it so that when scrollpanel
- exits, clear the whole sp1 display instead of just the map display. DONE.
-
- *19. Fix level editing the rest of the way. Level editor is finally
- working again on Jan. 12, 2000.
-
-
- ***************************
- *** IP1 Speedup Upgrade ***
- ***************************
-
- Time to completely display IP1 info panel on 25Mhz 030 A3000:
- IP1 display currently takes: 51 frames. A bit over 1 second.
- Implement FakeBlueScreen Trick: 30 frames.
- Just for fun I commented out
- SetRast (IP1HiResRastPort, BLACK); 23 frames. Indicating it takes 7 frames
- to do SetRast while a 64-color lores screen is being displayed.
- Commented out
- RectFill(pr,0,0,320,65); 22 frames. Indicating it takes almost 1
- frame just to do that in 64 color mode.
-
- Ok now I'm timing how long it takes to do the rectfill + setrast while
- in lores 1 bitplane mode (by pushing fake1bplscreen to front)
- 27 frames.
- 25 frames on nothing/nobody.
- 19 frames by #ifndefing out the current and max numbers.
-
- Implement CopyMemQuick Trick: should be 9 or 10 frames.
- 15 frames.
- 14 frames on nothing/nobody.
- Eliminated 2 ScreenDepth() calls 14 frames.
- 13 frames on nothing/nobody.
-
- * Optimize PutScreen() to not move the screen if it is already in the correct
- position. DONE. This effectively eliminates 2 PutScreen Calls.
-
- 12 frames on nothing/nobody.
-
- * Change all the colors from HiResYellow to IP1HiResYellow etc. DONE.
-
- * Make HalfHiResYellow be color 1. Mask = 1 when writing the antialias color.
- Make HiResyellow be color 9. Mask = 9 when writing the HiResYellow.
- Should double the speed of number printing from 6 frames to 3 frames.
- So I am just switching the positions of IP1HiResYellow<->IP1HiResGreen1
- DONE.
- 10 frames on nothing/nobody.
- TOTAL SPEED INCREASE: 5.1x
-
- ******************************
- *** END IP1 Speedup Ugrade ***
- ******************************
-
- * Make the small IP1SmallLoResScreen be really small in the OpenScreen()
- command. This will fix that lame glitchiness permanently!
- DONE.
- Ok, the glitchiness is fixed but now the mouse pointer teleports in order
- to stay within the bounds of the small screen. This is very annoying.
- So my options now are:
- A: Revert IP1SmallLoResScreen to be a full 512 pixels high and suffer
- with a glitchy display (the glitch is only displayed for 1 frame)
- B: Do option A + install a UserCopperList to set all colors to the
- background color. This would fix the glitch. But I have no idea how
- to install such a UserCopperList.
- C: Keep the screen small and just keep track of the mouse position and
- restore it. This should work but will cause a "mouse-pointer glitch".
- There is no easy way to do this. I'll hafta hack some code in to make
- this work. Special thanx to Kalsu for supplying me some example code for
- this. This is the option I will attempt.
- D: Leave the small screen small and make the big screen be 512 pixels.
- Put the big screen at the top of the display and the small one at the
- bottom. This would solve all the problems. But then we would have
- the pic of the creature and the powerups and kills at the bottom of the
- screen. This is the easiest way to fix it. How do you feel about this?
- E: Try setting BORDERSPRITES to see if that fixes things.
- I really don't want the mousepointer going into the side borders. I
- only want it to go into the bottom border area. But there is no way to
- specify this so I'm not going to try this option.
-
- * Implement Option C by making a function MoveMousePointer(x,y) DONE
-
- It basically works but the mousepointer flickers and jerks because its
- being moved around. So I'm now going to try Option
-
- * F: Make the IP1LoResScreen be the full 512 pixels high but in order
- to prevent glitchiness I'll set its color palette so that all 64 colors =
- the background color until the screens are all properly arranged. Then
- I'll reload the pallette back to its normal setting.
- DONE. WORKS GREAT. NO NOTICEABLE SLOWDOWN. NO MORE GLITCHES.
-
-
- *20. Reduce size of IP1HiResScreen and BitMap and Window down from 512 to 443
- (the exact right number) to speed things up. DONE.
- The IP1 and IP2 displays are now exactly 512 pixels in height. This
- noticeably increases chipram bandwidth since it has eliminated around 16
- pixels of vertical overscan.
-
- *21. Snapshot the base IP1 displays using straight 32-bit CopyMemQuick and
- copy them in for vast speed improvement.
- A. Add in some #ifdef code to cause the numbers and the name and owner
- to not be printed. DONE.
- B. Simply save the memory of the IP1HiResScreen straight to a diskfile
- Screens/IP1HiResScreenMem. 142080 byte file. DONE.
- If I ever do the 2nd screen it can be IP2HiResScreenMem.
- C. Modify start.c to load in the new Screens/IP1HiResScreenMem file. DONE.
- D. Modify info.c to copy the image to the screen instead of using
- all those timeconsuming AntiAliasWriteText() calls.
- Copy IP1HiResBaseDisplay to IP1HiResScreenMem. DONE.
-
- * Save mouse coords for SP1 screens. DONE
-
- * BUG: Promote() messes up the semaphore when performed on an exposed wizard.
- NOW FIXED.
-
- * BUG: Promote() on a scroll can cause enforcer hits. NOW FIXED.
- * BUG: Graphics of kills on IP2 screen are messed up. NOW FIXED.
- * BUG: Range is being printed over movement on IP1 screen. NOW FIXED.
- * BUG: Can't be Smelled/heard/seen is in wrong color and wrong position. FIXED.
- * BUG: Unexplored Region / Cloaked not erasing IP1 screen. FIXED.
-
- FLAW: The filerequester uses routines optimized to smoothly scroll on
- NONinterleaved screens.
- SOLUTION: Simply make the HiResScreen NOT be interleaved.
- When I did this the colors got all messed up on the HiResScreen! I have
- no idea what is going on. So I'm leaving the screen as Interleaved for the
- time being.
-
- Fix bottom screen glitch. DONE.
-
- * Fix screen dragging. Make all screens be nondraggable except for the SP1
- screen I suppose. DONE.
- *1. Simply put the SP1HiResAutoScrollScreen back to x,-512 every time you
- exit the scroll panel. This will prevent the hiresscreen from moving up
- and revealing garbage. DONE.
- *2. Try making the main map screen (screen) be nondraggable also. DONE.
- *3. Try making the fake1bitplanescreen be nondraggable. DONE.
- *4. Put the SP2 panel into the correct position with PutScreen(). DONE.
-
- ****************************************************************************
- January 28, 2000 END Information Screens Upgrade
- ****************************************************************************
-
- JJ Bug Report for v2.71: ===================================================
- * BUG: Promote() doesn't work right. His Undead Green Dragon: turned into
- a living Emerald Dragon. Ok I completely revamped Promote() to
- intelligently promote every stat. NOW FIXED.
-
- * BUG in Exploration Mode:
- Jason cast Moveit but when he got his extra move he couldn't see
- anything! However if he clicked on an "unmapped" square he could still
- move his units. NOW FIXED.
-
- Recompiled v2.71 into v2.72 and reinstalled on his computer.
- ==============================================================================
-
- ======================================================================
- Score Screen Upgrade:
- Make it a borderless backdrop window on a 640x512x16 colors interlaced
- screen. Just use SP1HiResWindow.
-
- Need 11 lines of text * 40 points = 440 points + 1 blank line = 480 points.
- Just 1 screen for now.
- Player Scores for Turn x.
- Player Team Life Score
- 9 lines of name + score.
- For now I'll use the same ChaosCalligraphyFont40. But maybe I'll use a
- different one later when I think of a good one to use.
- Use Team Numbers instead of graphical symbols.
-
- What should the colors be???? I need to use something other than dark
- blue for the background! For simplicity I'll just use the exact same
- colors that are already being used. (Black background).
- Try to use the SP1HiResScreen for the Score Panel and Spell Panel.
-
- Oh well I'm tooo tired to care about the colors now. I'm just leaving the
- colors as they stand.
-
- * Score Screen now looks halfway decent at least.
- =============================================================================
-
-
-
- JJ Complaints ==============================================================
- * COMPLAINT: When playing in (!ExplorationMode and !TexasTrashem) the
- exploration mode related spells should not appear in your spell lists.
- Just make a new tag: OnlyUsefulInExplorationMode
- Spells with this tag will have their probability set to 0 in the
- chaos.prb file. Their probabilities will be normal in the ExplorationMode.prb
- file. NOW IMPLEMENTED. Works great.
-
- * Spells which are only useful in ExplorationMode are now only dealt out if
- you play the game in ExplorationMode or in Texas Trash'em mode.
-
- * COMPLAINT: He wants a Music OFF feature. NOW IMPLEMENTED. Works great.
- ================================================================================
-
- * FIXED Magic Sword Description.
- * FIXED GooeyBlob spell description from "on recovery" to "after being uncovered"
-
- CHANGED:
- * Ropers, Wasp Nests, Pits, Magic Castles and Dark Citadels can now be cast
- on dead bodies.
- * Rocks now allow 3 attempts.
- * Combat Drain Beam damage increased to 8.
- * Nonarchery is now known as Archerotomy.
-
- ****************************************************************************
- InitialData[] bugs
- ****************************************************************************
- Previously there were 3 serious bugs related to InitialData[]:
- 1. The negative score bug.
- 2. The isIDcreature() bug.
- 3. The isIDblahblahetc() bugs (numerous macros were broken).
-
-
- Current bugs related to InitialData[]:
- chaos.c
- * BUG: All the recovery code (life recovery, intelligence recovery, etc.) has
- code that checks the InitialData[id].Life, etc. But there is NO
- InitialData[id].Life for a magic spell scroll! So the return result is
- unknown and will be random over time, as spells are changed/added.
- It could possibly cause an enforcer hit.
- NOW FIXED by using the macro.
-
- * core.c
- BUG: The code for GooeyBlob uncovering sets:
- b->char_stat.Life =InitialData[b->id].Life >>1;
- But there is no such thing for a magic spell scroll! NOW FIXED.
- * The WakeUp() routine has an InitialData[id].Weight which does not exist for
- magic spell scrolls. NOW FIXED.
- * Promote() accesses InitialData[id].Life, etc. This should only be used with
- creatures so it should not cause any bugs. NOW FIXED.
- * All occurences of InitialData[] replaced with InitialData() in core.c
- EXCEPT for InitialData[NOTHING] occurrences.
-
- * move.c/Growth() also accesses InitialData[id] but this should only be used
- with growths so it should not cause any bugs. But a scroll of a growth
- is still a "growth" so it might someday cause a bug, arggh.
- * move.c/Growth() more code for uncovering something covered by a growth
- which accesses InitialData[id] for scrolls that have no such thing.
- * move.c/Combat() would do an invalid access of InitialData[id] if a magic
- spell scroll had HORROR on it.
- * ALL occurrences of InitialData[] replaced with InitialData(), even the
- ones that were technically 100% safe because in future years after new
- object types are added they might become unsafe. Better safe than sorry.
-
- * spell.c/IntelligentComputerSpellSelect() is using the value of
- InitialData[id].Life for scrolls which have no such value!
- Oops the code is actually ok due to it saying "IF (isIDcreature(sp) and InitialData(sp).Life >s[STRONG]"
- I was thinking it said "isCreature" instead of isIDcreature.
- I replaced InitialData[] with InitialData() anyway.
- DONE.
-
- * cmove.c/GetCellWeight() is using InitialData[id].FavoriteFood and
- .RunsAwayFrom! This is wrong for magic spell scrolls.
- Replaced with InitialData() macro.
-
-
- There is already quite a lot of hacked-in code for not using InitialData[]
- beyond ExitID and I'm wasting too much time fixing silly bugs that never
- should have existed in the first place so I'm thinking of implementing the
- objects more as a true database and adding InitialData[] for EVERY id.
- This will burn 10 or 20k but since it makes the game more reliable, easier to
- code and keeps the code cleaner; it should be well worth it.
-
- The other option is to hack in some IF-THENs for each of the above listed
- cases + we would have to remember to do the same each time we add new code
- which uses InitialData[id].
-
- A third option is to make some sort of GetInitialData() macro which checks that
- the ID is <= ExitID and returns the appropriate value. Then I just
- search/replace all occurences of InitialData[] with GetInitialData()
- USING THIS OPTION.
-
- #define InitialData(x) InitialData[(x) > ExitID ? 0: (x)] Not good enough
-
- #define InitialData(x) (InitialData[(x) >=0 and (x)<=ExitID ? (x):( (x)<0 or (x)>RevealID ? *(char *)0 : 0))
-
- The above macro will be used because it handles the quirkiness of there not
- being InitialData for id's over ExitID _AND_ it does array bounds checking!
-
- more examples in SC:ArrayBoundsChecking.txt
-
- * Replaced all occurences of InitialData[] with InitialData() macro just to
- be safe in cast.c and info.c and init.c and all the spell files.
-
-
- Could just have a "magic spell" bit to delineate the 2 regions?
-
- * Chaos now has Array Bounds Checking, but only on the InitialData array.
- Currently for the bounds checking to actually report anything you must run
- the game under cpr and have enforcer running. Then bad subscript errors
- are trapped and the cursor is placed on the offending line just like in
- BASIC.
- ****************************************************************************
- END InitialData[] bugs
- ****************************************************************************
-
-
- * BUG: Violet Fungi graph has a line drawn through it. FIXED.
-
- * BUG: The right hand side end turn gadget isn't being redrawn when you
- examine an object on the board or a spell in your spell list. FIXED.
-
-
- Feb. 15th, 2000:
- * Incorporated SAI's new arcing weapon effect on all the elves.
-
- Feb. 16th to Feb 22nd: Moving to new apartment. No programming
- accomplished.
-
- Feb. 23: Internet account stopped working. My paid subscription ran out.
-
- ==========================================================================
- Feb. 23rd to 29th:
- * 10 NEW CREATURES: Mighty Orc, Oracle, OmniBiologist, Recognomancer,
- Memory Master, Memory Mage, Necromancer, Chronomancer, Hippocrates,
- Aesculapius.
-
- Mighty Orc who (looks just like an orc / looks like an orc
- with a big battleax) Mighty Orc has stats identical to Orc but with 15
- combat. Prob=9. Orc has PromotionCount=3, promotes to MightyOrcID
-
- An Oracle could be equivalent to a Crystal Ball.
- Just add a .Oracle bit to the wizardinfo struct and check it along with
- .CrystalBall
- The Oracle has a Crystal Ball which benefits the casting wizard.
- Oracle can use a fakewizard graphic #6.
-
- OmniBiologist uses a fakewizard graphic #8. 19 life, 1 combat, 1 move, 0 recover.
- The OmniBiologist is a Biologist, Exobiologist, Chronobiologist,
- Xenobiologist and Exoplanar-Biologist all rolled into one. He can
- instantly recognize any lifeform from any time-period, or from any other
- planet, or even from any other plane of existence. Upon viewing any
- scroll, he can recite from memory the complete statistics for any creature.
- If he can make 3 kills he promotes to Recognomancer.
-
- Recognomancer fakewizard graphic #7. 19 life, 1 combat, 1 move, 0 recover.
- Either 2 ranged combat against mr (range=3) or make him have actual lightning
- bolt spells. Graphic of Wizard with staff.
- The Recognomancer is similar to the Omnibiologist but he carries a deadly
- magic staff, making him much more lethal in magic combat.
-
- Memory Master Shade Graphic (stats of Ogre) + .memory bit set
- The Memory Master has perfect Eidetic Memory and will always remember what
- is under the object in any square on the board.
-
- Memory Mage similar to Ogre Mage! Shade graphic. (stats of OgreMage) + .memory bit set.
-
- Aesculapius is The Roman god of healing. 0 combat. -4 combat against all non
- recovery rates. Range=3. Archery. Max recovery rates in everything.
- Special Combat -4 against life only. Fake wizard #5.
-
- Hippocrates: 0 combat -3 ranged combat against life only. Range=1.
- The legendary Greek healer. Special Combat -2 against life only.
- Fake wizard #4.
-
- Necromancer: #3 (casts Kill and Raise Dead 33% of the time.)
-
- Chronomancer: #2 (casts Vanish 20% of the time.)
-
- 3 new special creature types:
- .Memory (remembers what is under a cell. Elephant, Memory Master, Memory Mage)
- .RecognizeCreatures (allows you to see the stats of scroll creatures +
- recognizes the creatures in your bonus spells list.
- OmniBiologist and Recognomancer)
- .Oracle (equivalent to having a CrystalBall. Oracle)
-
- * Need the above 3 in the wizardinfo struct also. DONE.
-
- * BUG in sm.c: It won't process my creatures with negative combat or
- negative ranged combat. NOW FIXED.
-
- * Special Programming for Oracle done.
-
- * ELEPHANT now has perfect Eidetic Memory.
-
- * INFO PANELS modified to show you what is under the cell if you have the
- memory powerup.
-
- We might want to make a graphic that means "You currently possess the
- perfect Eidetic Memory Powerup" to be displayed as a wizard powerup in
- ExtraDisplay(); If anyone wants to draw or render or rip such a graphic
- then please do so.
-
- Should there be an "Eidetic Memory" spell? It seems too weak. Its better
- to cast a creature that has Eidetic Memory built-in.
-
-
- Need to add code so that if you have the .Recognize powerup, pressing the
- LMB on the 2nd info panel of a scroll brings up an info panel of stats
- showing the InitialData[id] stats. So how do I do this?
-
- I can't simply make a pointer to a fakecell and call the InformationPanel()
- with this pointer because InformationPanel() has code which requires a
- numeric cell number. Actually there are only 2 lines of code which require
- a real cell number and they are related to exploration. (A long time ago I
- had to take the exploration info out of the cell structure because it saved
- me a LOT of problems rewriting code... however the price is that it is now
- causing me THIS problem) Luckily this is easily worked around.
-
- Options:
- A: allocate memory for an extra cell in board[] and use that as a fakecell.
- Then the cell will have a real number. This would be very easy to do but
- would wreak havoc with the array bounds checking. DO NOT DO THIS.
-
- B: Change the InformationPanel() cell parameter so that -1 means "This cell is
- a fake cell" and then add in 2 if-thens to not use any code that
- requires a real cell #. (only the exploration-related code requires a
- real cell number due to exploration bits not being contained in the
- playCell structure.) DONE.
-
- * Now I can simply make a pointer to a fake cell struct and call
- InformationPanel() on that fake cell struct! Easy.
-
- * If the wizard possesses the .Recognize powerup then pressing the LMB on the
- 2nd info panel of a scroll brings up an info panel of stats showing the
- InitialData[id] stats. DONE.
-
- * New Routine: RecalculatePowerups();
-
- Casting the memory master gives you the Memory powerup.
- Death of memory master makes you lose the powerup.
-
- Ditto for RecognizeCreatures powerup and Oracle powerup.
-
-
- A death or warp requires a total recalculation.
- A birth/insert doesn't really need a total
- recalculation it just needs a simple test on the 1 creature.
- For simplicity I will do a total recalculation in every instance since
- deaths/warps/births/inserts don't happen very often so cpu speed is not
- essential. Also doing the total recalculation each time will help to
- "cover up" future bugs whereby some new spell does something wacky and
- forgets to call RecalculatePowerups();
-
- Do creatures which are in the underpart of a cell provide powerups?
- I am going to say YES because:
- #1: Its easier to code it that way.
- #2: It sort of makes sense that an Oracle underneath a growth would still be
- able to see things with his crystal ball. (ok not really... but..)
- It sort of makes sense that a Recognomancer under a growth would still
- be able to recognize things by the wizard sending him a mental image of the
- thing to be recognized.
- It sort of makes sense that a Memory Master would still remember
- everything while he is under a growth.
- #3: Nothing needs to be recalculated just because something went from the
- underpart to the visible part of a cell (or vice versa).
-
- * Added in code to call RecalculatePowerups() in all appropriate core.c
- functions EXCEPT BackUpCellWizard() and RestoreCellWizard() because I'm
- not sure how those do/should work.
-
- Unfortunately RecalculatePowerups may get called 2 or 3 times in certain
- routines like Reinstate.
-
- * Added in code to call RecalculatePowerups() in warp.c.
-
- That SHOULD cover all the places that need RecalculatePowerups() added.
- However if there is any place in the code that removes some thing from the
- board or puts something on the board without using 1 of the above routines
- then there will be a slight bug. Should such a thing happen it will be
- neccessary to modify the offending code with a call to
- RecalculatePowerups() or modify it to use one of the above routines.
-
- * BUG: EditorPaste just puts stuff into a cell without using
- InsertCreature() and it doesn't ever call RecalculatePowerups(); so
- inserting Oracles, Memory Masters, Omnibiologists etc. doesn't give your
- wizard the appropriate powerup. NOW FIXED.
-
- * BUG: RecalculatePowerupsFlag was a BYTE instead of a LONG so it was
- completely and utterly broken. NOW FIXED.
-
- * 3 NEW STATS:
- .RecognizeGrowths (MullacDeIrvine)
- .RecognizeInanimates (Inanimatologist, Inanimage)
- .RecognizeSpells (Recognomancer)
-
- Recognomancer has all above stats set to true.
-
- * 3 NEW CREATURES:
- Mullac De Irvine: like a undead fake wizard but can recognize growths. (Wizard graphic #1)
- 4 kills promotes to Recognomancer.
- Inanimatologist: Can recognize Inanimates (walls, trees, etc.) Needs a graphic.
- 3 kills promotes to Inanimage.
- Inanimage is like an Inanimatolgist with the stats of an Ogre Mage. He
- heals the friendly inanimates around him. (Same graphic as
- Inanimatologist)
-
- * HORRIBLE BUG in sm.c: I have a line in the Recognomancer.spl file:
- Stat: STANDARD_CREATURE | STATIC_STAT | RECOGNIZECREATURES_STAT | RECOGNIZEGROWTHS_STAT | RECOGNIZEINANIMATES_STAT | RECOGNIZESPELLS_STAT
-
- It absolutely refuses to process this line. It gives bogus errors and
- screws up the compilation. It says "Unexpected white space in tag Stat"
- "Ignoring rest of line in attempt to recover."
- Ok, the problem was that the LINE_LENGTH in sm.c was set to 128 and after
- the 128th char it tried to process the rest of the line as a "Stat:" tag
- (?) Anyway I changed LINE_LENGTH to 256 so its ALL FIXED NOW.
-
-
- * Bonus Spell Selection now prints the name of the spell you are pointing
- at (if you have the appropriate .recognize powerup) at the bottom of the
- screen.
-
- Should I allow "q" to work on the bonus spell screen?
- Or should it just tell you the name of the thing you are pointing at?
-
- * 2 new bits: .RecognizeProgramming and .Ibrowse (mind reading).
-
- * 2 NEW INANIMATE OBJECTS:
- Burstroem's Browser: Allows you to browse through other people's spell lists.
- Optometron of Omniscience: sets all .recognize bits + .RecognizeProgramming
- + .Memory + .Ibrowse
-
- I couldn't decide how to implement the encryption of the programming files
- so I haven't implemented the .RecognizeProgramming feature yet.
- I guess vampire.c just needs to be rewritten as FastVampire.c to load an
- entire file in and encrypt it and write it back out. The current version
- of vampire.c is entirely toooo slow and greatly reduces compilation speed.
- Just copy coding techniques from jcformat.c into vampire.c.
-
-
- Copy everything into sc:chaos_2.81 before I attempt this stuff!
- I might screw everything up!
-
- Special programming for the .Ibrowse bit:
- Just make a simple modification to
- 1: RedrawRightHandSide(): NONE NEEDED
- 2: Simple modification to the BoardUpdate(); DONE
- 3: Simple modification to GetSpells(); Just had to move the .necro and
- and .forgot random clearing code to BoardUpdate(); DONE.
- 4: DisplaySpellList(); NONE NEEDED
- 5: Some complicated mods to HandleIDCMP(); DONE.
- _________________________________________________________________________
-
- When I compile I am getting an error in line 2681 of chaos.c
- "Error 218: declaration found in statement block"
- This is useless. And I have no idea where the problem is or how to fix it.
-
- When I JCformat chaos.c it tells me:
- "Error in line 2416: Ending does not match beginning."
-
- This is yet another example of a C compiler giving a useless error on a
- line when the REAL error is hundreds of lines of code away.
-
- * Problem fixed in 2 minutes thanks to JCformat.
- __________________________________________________________________________
-
- March 5th, 2000.
- * If you have Burstroem's Browser or the Optometron of Omniscience you can
- now press ctrl-# to browse through other player's spell-lists! Its very
- cool! Pressing the "end turn" / "return" gadget exits the
- browsing/peeking/mind reading back to your normal spell-selection. DONE.
-
-
- ==========================================================================
-
- * BUG: An Independent Aesculapius keeps shooting my creatures and healing
- them. NOW FIXED.
-
- * BUG: All enemy creatures with negative combat (Hippocrates and Aesculapius)
- keep healing their enemies and NOT healing their friends. NOW FIXED.
-
- * BUG: A human player cannot attack his own stuff with his healing
- creatures. NOW FIXED.
-
- * NEW FEATURE: You can now attack your own creatures if such an attack would
- heal the creature.
-
- * BUG: Healing attacks make no sound and no graphical effect. NOW FIXED.
-
-
- * New bit: EXOPHAGY_STAT
- * New stat BYTE char_stat.Scavenge (allow for negative numbers)
-
- * 4 NEW SPELLS: Eidetic Xenogenocide, Mnemicide, Scavengerism, Exophagy.
-
- * IMPROVED AI: I made a new FLAG_HIGHCOMBAT bit to help out the AI of the
- DemonicTouch and Exophagy spells.
-
- * Eidetic Xenogenocide has its own special AI routine to decide when to
- cast it.
-
- * Scavengerism provides +8 Scavenging to any scavenger or +4 scavenging to
- any nonscavenger. A scavenger eats corpses. Bon Apetit!
-
- Scavenger/Nonscavenger is determined by the InitialData[id].
- (isIDscavenger(id)). Should be as common as Recover Boost.
-
-
- * Exophagy is the act of eating your enemies alive. Yummy. Half of the
- damage you inflict in hand-to-hand combat will be added to your life force.
- Should be as common as Recover Boost.
-
-
- * BUGS: Sleeping Ropers teleport, Sleeping Haunts change sides, Sleeping
- Volcanos explode, Sleeping Spriggans fall asleep and Sleeping Meditations
- Collapse. NOW FIXED.
-
- * IMPLEMENTED special code into BoardUpdate() for handling scavenging on
- March 8th, 2000.
-
- HandleScavengerism drains your ScavengerValue*2 from the dead creature
- beneath you and gives you ScavengerValue of points to your life.
- You can't drain more life than the corpse has.
- When you drain a corpse down to negative of its normal maximum it is
- devoured and disappears.
- You can't gain more life than your normal maximum.
- Scavenging always happens AFTER regular healing with recovery rates.
-
- I have not tested negative scavenger values. They might freak out. Who
- knows?
-
- * NEW SCAVENGER ABILITY:
- Vulture +2, Giant Rat +4, Neo Otyugh +4, Tyrannasaurus Rex +5,
- Dire Wolf +2, Arctic Wolf +2, Orc +1, Mighty Orc +2.
-
- I might try to make Exorcist -1 later.
-
- * ADDED Scavenger to the 1st info screen. It is only shown for those
- creatures that actually have a Scavenger value.
-
- * BUG: Speech for Neo-Otyugh and Inanimatologist doesn't work! NOW FIXED.
-
- * ADDED Exophagy to the 2nd info screen + the level editor.
-
- * ADDED Exophagy to the combat system.
-
- * Currently exophagy only applies to LifeCombat. So damaging an opponent's
- intelligence doesn't gain you any intelligence. Perhaps this should be
- changed? This exophagy concept needs to be playtested.
-
-
- Enhanced scavenging mode:
- 1: If there is no scavenging going on this turn then don't play the music.
- 2: Play the scavenging music. modified ChaosTheme42
- 3: Count up how many creatures will scavenge this turn. Divide this number
- into 7 seconds (350 frames). This is how much time each creature will be
- highlighted.
- Highlight time not to go lower than 50 frames. So 7 seconds is long
- enough for 7 scavengers. The mod can just be position 16 and 17
- "eatem up yum yum" then 6,7,8 then looping. 35 seconds of music is way
- longer than I'll ever need. That's enough for 35 scavengers. It will take
- at least 21 scavengers to get to the cool part of the mod.
- I'll try to work out some way so that the Scavenging Phase can flow into
- the Artifact changing phase
-
- So 7 scavengers or less plays Mod A. (1 pattern of eatem up yum yum then
- the wild pattern happens at the same time as the screen for
- "Artifacts Changing Wwners Phase".
-
- So 8-14 scavengers plays Mod B. (2 patterns of eatemup yum yum then the
- wild pattern happens at the same time as the screen for "Artifacts
- Changing Owners Phase.
-
- Possibly should put in some sort of "Dammit he stole my artifact!" or
- "He stole my artifact!" into the mod.
-
- Mod AA is for the short 1st part + the wild part with "He stole my artifact!"
- Mod BB is for the double 1st part + the wild part with he stole my artifact!"
-
- 4: Highlight the creature and do a WriteNearBottom: James's Neo-Otyugh eats
- some Red Dragon Meat. Life +4. Wait 50 frames. NEXT.
-
- {flesh,meat,carcass,corpse,cadaver}
- {eats,chows down on, munches on, nibbles on, drinks, sucks on, slurps down,
- scarfs down, chews on, feasts on, ingests}
-
- "%s's %s {eats} some %s {flesh}. Life %+d"
-
-
- HORRIBLE BUG: When I added 2 new lists into TalkLists I started having
- enforcer hits and crashes. I ran mungwall/sushi and got tons of mungwall
- hits. I think I fixed one longstanding mungwall problem but I haven't yet
- been able to stop the current problems and crashes. When I use the old
- talklists file, everything works fine as before. This is all very strange.
-
- Several days later: I narrowed the problem down to 1 of the 2 following
- lines of code by simply inserting TerminateChaos(0) at various points in
- the start.c startup code.
-
- One of these 2 lines is totally trashing memory and corrupting things:
- start.c/CommenceChaos()
- IF (!(ListNameArray=(char **)malloc((NumberOfLists+1)*8))) THEN
- TerminateChaos(CHMEMORY_ERR);
- END_IF
-
- start.c/TerminateChaos()
- IF (ListNameArray) free(ListNameArray);
-
-
- So either malloc() or free() has horrible bugs (which seems highly
- unlikely) or there is some other bug somewhere that is trashing some of
- the memory holding the code for the malloc() and/or free() functions (this
- seems AMAZINGLY unlikely, since trashing some program code would normally
- produce an ILLEGAL INSTRUCTION guru.)
-
- I have replaced that particular malloc/free with AmigaOS AllocMem/FreeMem
- and now the program SEEMS to be working perfectly with no enforcer hits and
- no mungwall hits. HOWEVER, it is my opinion that there is still a bug
- somewhere that is trashing memory because I just ran and quit chaos twice
- and then typed "smake" in the shell and sc gurued with exception 80000004.
-
- During the last few days of trying to kill this horrible bug I found some
- other hideous bugs that I fixed.
-
- * BUG: You cannot use the same struct NewScreen to open 2 different
- screens. If you do there will be lots of hideous mungwall hits deep in the
- OS where X bytes of memory are allocated but only X-y bytes are freed.
- NOW FIXED.
-
- I think the same thing might be true for struct NewWindow so I modified the
- intro code to use 2 seperate NewWindow structs.
-
- * MEMORY LEAK: Each time that CloseWindowSafely() is called results in a
- 34-byte memory loss. I have no idea why this is happening since
- CloseWindowSafely() doesn't allocate any memory! I didn't write
- CloseWindowSafely(), I simply copied it from the Amiga Developer's CD
- Oh well... I have replaced all calls to CloseWindowSafely() with old
- fashioned CloseWindow() and now there are NO memory leaks in Chaos! YAY!!!
-
- * BUGS: I still get a mungwall hit + bizarre crashes with zillions of other
- mungwall hits (sometimes from input.device or Iprefs or CygnusEd, etc.)
- each time I run chaos, set the options then immediately quit on turn 1
- without doing anything. So I have now replaced 2 of those other mallocs
- and now everything seems to be working perfectly. THIS IS VERY STRANGE
- because I replaced the malloc()s with AllocMem() but FORGOT to replace the
- free()s with FreeMem()!
-
- 1. reset puter
- 2. run muforce stdio
- 3. run muguardianangel nametag nostackwarn
- 4. run sushi asksave
- 5. run cpr chaos
-
- OR
- 1. reset puter
- 2. run c:enforcer/enforcer stdio
- 3. run mungwall task chaos nametag
- 4. run sushi asksave
- 5. run cpr chaos
-
-
- MuLink.lha dev/misc 94K 4+Memory protect selected hunks of binaries
- Mem2_2.lha util/moni 39K 77+Memory viewer, editor and browser
- memtest.lha util/misc 12K 357+Memory Tester
-
-
-
-
- * BUG FINALLY SOLVED: Ok, the REAL problem was in the TalkList file
- handling. There were various FOR-NEXT loops that went while
- p<=TalkListBufferEnd when they REALLY should have said p<TalkListBufferEnd
-
- Also, I was only doing AllocMem(NumberOfLines * sizeof(char *)) instead
- of the C-proper AllocMem(NumberOfLines+1) * sizeof(char *))
-
- BOTH OF THESE BUGS NEVER WOULD HAVE HAPPENED IF C HAD ARRAY-BOUNDS
- CHECKING! It took me 18 hours to track down and fix these bugs.
-
- ALL IS NOW FIXED! (March 19, 2000)
-
- * All appearances of malloc() and free() not working were just terrible
- side-effects of writing 2 elements beyond the allocated memory!
-
- * Make a modified "Eatemup yum yum mod" to play during the scavenging and
- artifacts-changing-owners part of the board update. DONE.
-
- I am taking Blocks from Song 0 and using them in the other songs
-
- Block 22 becomes block 0
- Block 04 becomes block 1
- Block 05 becomes block 2
-
-
- Song 1: 22, END (SHORT Scavenge music 7 seconds)
- Song 2: 22,22, END (LONG Scavenge music 14 seconds)
- Song 3: 22, 4,5 Loop back to 4 (SHORT Scavenge + Artifact music)
- Song 4: 22,22, 4,5 Loop back to 4 (LONG Scavenge + Artifact music)
- Song 5: 4,5 END (Artifact Changing Music ONLY)
- Do enhanced "Artifacts Changing Owners Mode"
- I guess I should divide 14 seconds by the number of artifacts that will
- change. But it should be at least 1 second per. And no higher than 7
- seconds per.
-
-
- * BUG: startmod ONLY plays song 0 regardless of the supplied song paramter.
- MUST reassemble the music replaying code with debug info so I can trace
- through and debug this crap! But I'm in a hurry so I have worked around
- it for now by simply doing:
- loadmod("filename");
- playmod(songnumber);
- This works. But sometimes it doesn't work the very FIRST time you do it.
- So there are yet more bugs in the music playback system 8(
- However:
- loadmod("filename");
- playmod(songnumber);
- playmod(songnumber); seems to make everything work ok. Just double up the playmod() command.
-
-
- * Make a new StartMod() function that works around the bugs by doing:
- loadmod()
- playmod()
- Delay(1);
- playmod()
-
- Then replace all occurrences of startmod and loadmod/playmod with this new
- routine! DONE.
-
- StartMod(0) doesn't work correctly on song 0 for some unknown reason. So
- I am still using startmod(0) for playing song 0.
-
- * I had all those startmod() problems and implemented all the fixes back
- when I was writing beyond the bounds of my allocated memory in the TalkList
- file handling. So perhaps that was real cause of the problems?
- Weeks Later: No, the subsongs till usually freak out the very FIRST
- time they are played.
-
-
- March 21st, 2000:
- * Sound sample playing cli command implemented.
- * New End of Turn sound implemented. (I really hated the old one.)
- * New healing sound for combat that heals.
-
- * BUG: Sound sample cli command always crashes when played from within
- Chaos and when typed as an actual command in a shell window while chaos is
- running, it doesn't crash but it just never quits either (until you send it
- a ctrl-c) NOW FIXED.
-
- * BUG: When a creature attacks your SpecialCombat stat, your SpecialCombat
- stat always becomes -15. NOW FIXED.
-
- * PROBLEM: There is a delay when playing sound effects with the cli
- command. This is due to 3 things:
- 1. The command must be loaded from the hard drive. This delay could be
- reduced by putting the command into the ram: disk. DONE.
- (It could be eliminated by making the command resident (requires
- recoding))
-
- 2. The memory for the buffers must be reallocated each time it is run.
-
- 3. The sound file must be loaded from disk each time. I could eliminate
- this by loading frequently used sounds into memory... or the Ram: disk.
-
- 4. The animation system is running in 64 colors and its slowing other tasks
- down.
-
-
- * PROBLEM: Aesculapius's shooting attacks increase the target's
- SpecialCombat. So I've got several creatures now with SpecialCombat but
- their SpecialCombatApply and SpecialCombat Except bits are not set so their
- Special Combat is attacking EVERYBODY (enemies, friends, scrolls,
- everything). But since SpecialCombatApply is not set, no actual damage is
- done.
-
- I have 2 options for fixing this:
- A: Set every creature to have a default SpecialCombatApply of life and
- SpecialCombatExcept of FRIENDLY.
- B: Change Aesculapius to not attack SpecialCombat. This option is the
- easiest and since Aesculapius is incredibly powerful already I'm going to
- do this option. DONE.
-
- * BUG: Sound sample player cli command ALWAYS freaks out when running 2 of
- them at the same time. (but only when using the -2 option)
- NOW FIXED by allocating the sound channels at maximum priority.
-
-
- * BUG: sometimes the sound sample player cli command never exits.
- This might have something to do with either:
- A: It tries to output an error message and hangs for some reason?
- B: It hangs when it can allocate the first audio channel but not the 2nd
- one.
- C: It hangs due to strangeness in the Audio.device code.
- D: It hangs due to music system "stealing" the sound channels while it is
- still playing. This SHOULD be impossible but it appears to be exactly
- what is happening.
-
- Possible solutions:
- A: Each time I run JCSound I will soon afterward do a WaitJCSound(); Thus I
- will never try to run 2 of them at once.
- B: Modify JCSound to output a message when it is finished to a pipe:file
- that Chaos will check.
- C: Modify JCSound to send Chaos a ctrl-d when its finished so I can Wait on
- it.
- D: Assume scenario D: above is true and simply make the Music system Wait
- for JCSound to finish before starting. DONE. SEEMS TO WORK PERFECTLY.
-
-
- --------------------------------------------------------------------------
- ---------------------- WaitJCSound routine -------------------------------
-
- * WaitJCSound() routine. DONE. Uhmmm... It doesn't work.. FindTask() NEVER
- finds my tasks by name! 8(
-
- OPTIONS:
- 1. Use SASC Fork() and Wait().
- Advantages: Easy to wait for it to complete. Don't have to muck
- around with messageports and things.
- Disadvantages: Fork REQUIRES that the code be a program stored on disk,
- thus there is a slight delay while the code is loaded.
-
- 2. Use AmigaOS CreateNewProc.
- Advantages: Can directly call code in the main program as a
- subtask/subprocess.
- Disadvantages: I'd have to rewrite JCSound to be internal to the main program.
- I'd have to create some ExitCode to send the main
- program a message when JCSound is finished. This
- requires making a secret messageport to check.
-
- 3. I could just rewrite JCSound to take an extra MessagePort parameter and
- then JCSound would simply send a message to that port when it is finished.
- 3A. Or I could rewrite JCSound to do a FindPort() for ChaosJCSoundPort
- and send a message to it when finished.
-
- 4. I could rewrite JCSound to be internal to the main program AND it will
- simply run continuously and send the main program a message when it is
- finished. This way it doesn't have to keep reallocating its buffers and
- stack and everything!!!!!
-
- Advantages: Only have to CreateNewProc on it ONE TIME.
- It would always be loaded into memory and would be
- instantaneously fast at getting started. No more waiting
- while it allocates all its memory and stuff.
-
- Disadvantages: It must CreatePort() a message port to receive various
- messages such as: START, STOP, UNLOAD.
- Or perhaps it could just respond to ctrl-c etc.
-
- OK, the problem is that when you run a program in a cli the taskname is set
- to "CLI 6" or somesuch. I tried putting in a
- SetProgramName("ChaosDigitalSoundSubProcess") into JCSound but it still
- didn't put that name into the tasklist, just in some other "command list".
-
- So now I have simply changed FindTask() into FindPort() to see if the
- subprocess is still running. Finding a port by name seems to work
- perfectly. NOW FIXED.
- ---------------------------------------------------------------------------
-
- There will be a completely seperate cli command called ChaosBackgroundMusic
- which will only be run if streaming background music is activated. It will
- run in looping mode until it recieves a ctrl-c.
-
- I've decided not to use the PlayADPCM command due to the fact that hard
- drive storage is sooo cheap these days. Hard drive space is not a problem
- anymore.
-
- * JCSound is currently 18640 bytes in size. I am now recompiling it with
- optimize. Now its 17948 bytes in size. SAVED 692 bytes.
-
- * ADDED in some code so that combat sounds can be added by the end user by
- simply putting an 8svx sound file into the dir Sounds/Combat/Monster Name
- where "Monster Name" is the exact name of the monster that will play this
- sound effect when attacking. The name must be exact. It is
- case-sensitive. Spaces must be correct also. Do NOT place an extension
- such as .8svx onto the filename.
-
- Now when someone is playing the game and they say "Hey! I have a GREAT
- sound effect for this monster! I wish I had some way of adding it to the
- game.", they can really do it!
-
-
-
- ------------------------------------------------------------------------
- STRANGE BUG: I just did a "smake clean" then "smake" and no errors are
- reported but when it gets to the linking phase slink complains that
- _GeneralImages has not been defined anywhere. I searched through the
- entire program code and, sure enough, GeneralImages is not defined
- anywhere.
-
- GeneralImages is supposed to be defined in creature.d.
- Creature.d is created by makedata which comes from makedata.c which comes
- from graph.tex.
- makedata makes creature.d by processing makedata.txt.
- What makes makedata.txt?
- The spellmanager script makes makedata.txt by joining a bunch of files
- together!
- JOIN ram:image1.tmp ram:image2.tmp ram:image3.tmp ram:imaged.tmp makedata.tmp AS makedata.txt
-
- Above line is unchanged in all my old version of chaos
- so makedata.tmp must not be getting made correctly!!!
- Uhmmm... makedata.tmp DOES NOT EXIST. It is NEVER created or modified by
- anything anywhere!
-
- However in the makefile there is this curious construction:
- creature.o: makedata initial_data.c
- makedata
- copy ram:images.tmp creature.d
- type ram:il.tmp >>creature.d
- delete ram:images.tmp
- delete ram:il.tmp
- sc $(STDOPS) nodebug optimize memorysize=huge creature
-
- makedata is used to creature creature.d and then the type command is used
- to join "il.tmp" onto the end of creature.d. So I guess il.tmp is not
- being created properly.
-
- But makedata.c is simply processing whatever is in makedata.txt!!!!
-
- I cannot figure this out!
-
- Ok I sort of figured out what was actually missing from the program and
- hand edited everything to work. This took a couple of hours and made me
- late for work. I imagine this is all going to happen again the next time I
- add new spells to the game and must completely recompile everything.
- I fixed this months later once I discovered that a *.tmp file was missing
- in the directory.
- ------------------------------------------------------------------------
-
- * BUG: When playing Texas Trash'em Select a spell, then examine a spell.
- When you are finished examining your spell only the part of your spell list
- up to the point of the spell that you are casting gets redrawn. The others
- are not redrawn. This is a problem in DisplaySpellList(). NOW FIXED.
-
-
- =========================================================================
-
- * Modify the combat routine to play the combat sound if present for
- this monster. DONE.
-
- What the hell do I do now? Do I make a NEW ROUTINE called:
- CellEffectWithDigitalSound()
- Disadvantages: It would HAVE to duplicate all the gfx code of CellEffect()
- therefore it seems stupid.
- Advantages: Don't hafta go through and add ,NULL to all function calls.
-
- Or do I just add a new parameter to CellEffect()
- Disadvantages: Hafta add ,NULL to all existing CellEffect() calls.
- Advantages: Allows me to mix and match any gfx effect with any sound
- effect.
-
- I am going to send in a char * parameter which points to a string which
- contains the filename. Here is the BIG problem!
-
- I don't want to have to constantly do
- sprintf(text_store,"Combat/%s",creature_name[x]);
-
- I could JUST pass in ,creature_name[x]) THEN IF it is a ATTACK sound then
- CellEffect will assume the Sounds/Combat/ part of the filename and do the
- sprintf itself.
-
- * Changed Jillions of CellEffect() calls to also pass a ,NULL parameter.
- Hopefully within a year most of these NULLs will be replaced with real
- digital sound effects.
-
- =========================================================================
-
-
- 0. Assign a couple of sound effects to test out the system!
- Ok it works BUT OMSS 1.03c and DSS8 and SFX3.50 all refuse to save the
- playback speed information into the sound sample! So the speeds are all
- wrong!
-
- OPTIONS:
- A: DL that little ratechanger cli proggy from aminet.
- samrate15.lha mus/edit 12K 128+Changes pitch of 8SVX samples
- No, this is a pitchshifter which is very nice but not what I want.
-
- B: Switch to a new sample editor program from aminet or from my
- collection. There are about 2 dozen different ones! I have no idea
- which ones to try! I guess I'll try the 10 year old AudioMaster 4.
-
- I FINALLY FIGURED IT OUT. In OMSS you must hold the mouse button down
- and simultaneously press a note key to register your note. THEN from
- within the Sample Editor Window you must select
- Tools/Copy Pitch/Sample Editor -> Inst. Default
-
- * BUG: If you have a creature that has Ranged Combat and he is attacked
- by a Range Drain Beam spell such that his Ranged Combat is reduced to 0
- then a subsequent Range Boost spell will NOT work on him! Simply put:
- the bug is that Range Boost does not work on creatures with 0 Ranged
- Combat EVEN THOUGH they had some "initial ability". NOW FIXED.
-
- * INSTALLED over 50 new digital sound effects into the game.
- * The Eagle has a real Eagle sound when attacking.
- * The Vulture has a real Vulture sound when attacking.
- * The Crocodile and ShapeChanger have a real Alligator sound when
- attacking.
- * Magic Glass now makes a breaking glass sound when it is killed.
- * Dire Wolf yelps when it dies.
- * Arctic Wolf whimpers when it dies.
- * All Dragons make hideous screams when they die. They are now 4x as much
- fun to kill!
- * When you kill a generator the crowd goes "Aaaaaaaahhhh" in amazement.
- * Jaguar and Leopard go "rrreeeeeooooowwwwwrrrr" when they die.
- * Stone Giant says "I kill you!" when he kills someone.
- * All Ogres say "Attack!" when they attack something.
- * All dragons, cats, Hydras, Bears and Tyrannasaurus roar when they attack.
- * Neo-Otyugh makes an eating sound when he attacks.
- * All Wolves howl when they attack.
- * Robot makes a mechanical sound when it attacks.
- * All Horse-like creatures make real Horse-like sounds when they attack.
- * Gorilla makes a real Gorilla sound when attacking.
- * Fire Demons and Devils laugh evilly when attacking.
- * Ghost goes "wooOOooOOooOOoo" when attacking.
- * Camel makes a real Camel sound when attacking.
- * Water Elemental makes a water sound when attacking.
- * Fire Elemental makes a burning fire sound when attacking.
- * Air Elemental makes a wind-blowing sound when attacking.
- * Earth Elemental makes a rocks falling sound when attacking.
- * King Cobra makes a rattlesnake rattling sound when attacking.
- * Stone Giant goes "OOOORAAH!" when attacking.
- * Wolverine growls when attacking
- * Bodak and Bird-Lord make sounds when attacking.
-
- I need to have some sort of generic attacking and dying sound for all those
- wimpy bipedal creatures. Any ideas?
-
- * INSTALLED 3 new chaos theme songs on March 29th, 2000.
-
- * CHANGED scavenging to drain as many points as are gained. (It used to be
- 2x as many.)
-
-
- ====================== JJ Bug Report: ==============================
-
- * BUG: Turmoil caused wizards to be riding independent generators, fauns,
- etc. This was caused because TurmoilHandler() ONLY checked if the source
- cell had a mounted wizard and moved the wizard correctly. It wasn't
- checking if the destination cell had a wizard. NOW FIXED.
-
- * STUPID: Wizard cast Restoration on his cloaked, combat, magic shielded
- wizard. I changed it so wizards no longer cast restoration on their
- cloaked creatures. NOW FIXED.
-
- * BUG: Wizard is engaged to a creature. Wizard attacks magic wood tree and
- kills it thus immediately moving into the space and disappearing into lala
- land. Ok, I have now made it so that if a wizard is engaged he cannot
- attack, mount or move onto any meditation. It will simply say
- "You cannot enter a meditation while engaged". NOW FIXED.
-
- * BUG: Necropotence usually causes the game to lock up.
- I played a game and cast Necropotence on a computer wizard and he cast
- Necropotence on me several times but nothing bad ever happened.
-
- Ok I'm trying it again this time I've set it up so that the computer guy
- doesn't have ANY creatures, thus if I Necropotence him he'll have NO spell
- to cast. It locked up in an infinite loop. NOW FIXED.
-
- =====================================================================
-
- * REDUCED THE VOLUME of the algorythmic sound effects so they don't
- overpower the digital ones. Technically they have always been too loud.
- A perfect sine wave going from +127 to -128 is really too much.
- I've reduced it to +90 to -90.
-
- * CHANGED Vampire to have -4 recovery + exophagy so that when he attacks he
- recovers 1 point. If he does not constantly feed on creatures he will
- soon die.
-
- * SWAPPED the ranged combat stats of Shadow Dragon <-> Pseudodragon so they
- would make more sense.
-
- * PROBLEM: You can get an Iridium horse in every single game because a
- typical game includes 2 or more aviaries, thus Bird Lords are abundant and
- its only a matter of time till you get an Iridium Horse. This whole
- thing is actually a bug. Iridium Horses are SUPPOSED to only be made
- when killing a DRAGON (or a Tyrannasaurus Rex). NOW FIXED.
-
- * Now using the "Hallelujah" choir sample for the bonus spell noise.
-
- * ADDED IN THE CODE TO PROCESS Sounds/Kill/ and Sounds/Death DONE.
- Now anyone can make a sound effect for when a creature kills something or
- for when a creature dies just by putting the sound in the appropriate
- directory and naming the file with the name of the creature.
-
- * I went back and listened to every sound effect and several of them were
- not very loud so I edited them and increased their volume to 188%. I kept
- the original sounds in sc:OriginalUnmodifiedSounds/.
-
- * BUG: Sometimes the digital sounds fail to play because they can't
- get one of the audio channels. I believe this is because AlgoFreeChannel
- was not doing a ADCMD_FREE before it closed the audio device.
- Also sometimes the speech flips out and sounds on 2 channels at once.
- ALLEGEDLY NOW FIXED. (hopefully this fixes the subsong problems too)
-
- uhh... hmm... The only thing that has changed is that the algorythmic
- sound effects now proceed MUCH faster than before.... They appear to be
- at least 4x faster. Probably because it is freeing the channel before
- the sound is complete.
-
- I still get all the same weird audio bugs as before. :(
-
- 1. Play a test game with the speech OFF to see if that makes any difference.
- It didn't make any difference that I could tell. Sometimes JCSound
- couldn't allocate its channel just like always. :(
-
- 2. Play a test game with speech OFF and sound OFF. Still got the same
- weird random bugs, possibly due to the fact that sound OFF only turns off
- certain sounds while others still make noise.
- 2. Investigate FreeAlgoChannel()
- 3. Investigate reusing same struct IOaudio thing.
-
- So either Speech routine is messed up or Algo sounds routine is messed up
- or both!
-
- Originally the audio device was only opened once and then it stayed open
- for the whole game. Now it is opened and closed all the time.
- So nowadays the first time we open it, we are using a zeroed out ioaudio
- struct, and everytime thereafter we are using an ioaudio struct with stuff
- in it.
-
- AS AN EASY TEST, JUST MEMSET THE STRUCT TO 0 AND PLAY A TEST GAME THAT WAY
- TO SEE IF THE BUG GOES AWAY! The bug is still there! Ack!
-
- Simply add in a ADCMD_FINISH; Wait(); before the CloseDevice.
- I did this and played a short test game. It only messed up once and that
- is when I noticed the speech playing on 2 channels at once. However I
- don't know if it messed up before or after the speech. I think it messed
- up after the speech did. Did the speech mess up on its own? Or did it
- mess up because the algosound messed up?
-
- I played YET ANOTHER test game to see if it messes up with SPEECH OFF.
- Ok the sounds NEVER messed up! YAY! So the only remaining sound effect
- bug is in the speech system! I looked over the code and didn't see
- anything obvious. I'm leaving this bug for SAI to fix. If he can't fix it
- then I'll just rip out the narrator.device speech and replace everything
- with digital speech.
-
-
- * HACK FIX: In order to work around the sound channel problems caused by
- our use of narrator.device, I have put some code into JCsound so that the
- -2 option (play a mono sample on both left & right channels) will switch
- down to playing it on _any_ channel it can get hold of if one of the
- channels is unavailable. I played part of a test game and the sounds
- seem to be working 100% now with this fix installed. But I'm sick now
- and I only played several turns. ALLEGEDLY FIXED.
-
- * BUG: Hippocrates randomly gained a combat point and it made him have 0
- combat!!! Fix this by checking for negative combat and if so then -1 the
- combat. Make sure it doesn't go below -max_combat. NOW FIXED.
-
- * MODIFIED RANGE BOOST: so that if it is applied to a creature with
- negative ranged combat, it will subtract 4 from his ranged combat; thus it
- will heal 4 points more. It still adds 4 to the range as usual.
-
- * BUG Grizzly Bear Combat sound is not working!!! NOW FIXED.
- * BUG Kill files are not working!!! (Stone Giant didn't say "I kill you")
- NOW FIXED.
-
- Always REMEMBER to enclose filename in \" marks! So spaces in the name
- won't mess it up! Maybe I should make this into a function?
-
- * Read docs for narrator.device to see if it is ok to send in an
- uninitialized struct when opening the device? Yes it is 100% ok to do
- this. According to the RKRM: Opening the device sets the struct to all
- default values.
-
- * April 15th: Installed OS 3.1 ROM into JJ's A3000 computer. He now has a
- full fledged OS 3.1 computer. I would have installed a web browser on it
- so he could read the .html spell docs but he only has 4 megs of fastram.
-
- * BUG: A computer wizard cast Vodka on the independents. Their combat was
- halved like it was supposed to be... but it never said "Independents are
- drunk with vodka" and the screen did not wave during their movement.
- NOW FIXED.
-
- =========================================================================
- April 15th JJ bug report:
- * BUG: Generators do not heal 7 intlligence like the stats say.
- (Note from JC: Actually NONE of the generator's stats heal like they are
- supposed to except for life.) NOW FIXED.
-
- * BUG: Casting Inanimorphobiosis or StoneToFlesh on a ShadowWood doesn't
- let you move it around and attack with it. NOW FIXED.
-
- * BUG: He walked up next to a computer wizard and did not get engaged to him!
- But that's ok because the wizard was inanimate and you are not supposed
- to get engaged to inanimate objects. BUT this inanimate wizard was roaming
- around killing things! So the real bug is:
-
- * BUG: Inanimate Wizards can still move and attack.
- I have 2 options for this:
- A: Make it illegal to cast FleshToStone and MassPetrification on wizards.
- B: Allow it to be legal and just fix it so that Inanimate wizards can no
- longer move or attack. They will still be able to cast spells as usual.
- And they can reanimate themselves by casting StoneToFlesh or
- Inanimorphobiosis or Restoration on themselves.
-
- I am choosing option B: for now. If for some reason this does not play
- well then I can change to option A:
- NOW FIXED.
-
-
- * BUG: An Aerial Servant with max combat gets covered by a growth. You kill
- the growth and it still has its max combat. Only the life is cut in half.
- That is ok. But if a creature is under a growth for a long time, it eventually
- gets all of its stats set back to their original values but with life cut
- in half. This effect can cause massively awesome creatures to be reset
- to their original lameness. This effect can also be used to heal poisoned
- creatures.
-
- --------------------------------------------------------------------------
- Note from JC: the actual "bug" is that if a creature is covered by a growth
- and the growth dies of natural causes then the creature's stats are reset
- to their original values. However, this is not a bug but merely an
- "Undiscovered Rule" :)
-
- It can be interesting to intentionally allow your poisoned or wounded
- creatures to be covered so that they can be healed.
-
- If you want the creature to be returned to its original stats then you must
- let it stay covered till the growth dies of natural causes.
-
- If you do NOT want the creature to be returned to its original stats then
- you must kill the piece of growth ASAP.
-
- In either case, the life of the creature will be set to one half of its
- normal maximum.
- --------------------------------------------------------------------------
-
- End of April 15th, JJ Bug Report.
- ===========================================================================
-
- * PLAYED a test game where my wizard and the computer wizard were both
- inanimate. It was very interesting and played quite well!
-
- * BUG: Artifact Creature is covered by growth, growth dies of natural causes,
- Artifact creature is no longer an artifact but a REAL creature. NOW FIXED.
-
- * BUG: Red Dragon Scroll is covered by a growth, growth dies of natural causes,
- Now the scroll is a REAL Red Dragon belonging to NOBODY! NOW FIXED.
-
- * BUG: My wizard is inanimate. But I can still click on him. When I move
- him he doesn't move but some sort of bizarre copy of him is made whose
- animation is composed of a wizard image, a dead image of something and a
- grey elf image. All its stats are 0, but its initial stats are all set to
- those of a wizard, so its stats look like those of a dead wizard. Even
- though it says its "Nothing. (Nobody)" NOW FIXED.
-
- * BUG: My Inanimage is ONLY healing my adjacent wizard! It is somehow not
- healing my Brown Bear and my Wood Elf. DOH! This is not a bug! The
- description of the Inanimatologist clearly states that it only heals
- adjacent inanimate objects. And since my wizard is inanimate in this game
- he get's healed but my other creatures are not. EVERYTHING IS OK.
-
- * OH GOOD GRIEF! OK Chaos is running and I'm online. I play chaos for a
- while. I'm now in the spell-selection phase. I notice the modem lights
- look strange and I go to check my email. Yam reports that I don't have a
- TCP/IP stack running (The modem has just gone offline due to it being such
- a long time since I did anything online). SOMEHOW this error window
- freaked out the music in Chaos!!!! THIS SHOULD BE IMPOSSIBLE!!! The music
- has allocated the sound channels at MAX_PRI!!!! Arrrgh!
- Well at least I figured out the bug: The music system defaults to using
- CIA timer chip #1. If it isn't available it uses CIA timer chip #2.
- But Miami can ONLY use CIA timer chip #1! If it isn't available it just
- tries to steal the use of it, thus screwing up anything that is using it!
- So really this is a bug in Miami.
-
- * Solution: Go online BEFORE starting Chaos. If you go offline for some
- reason and you want to get back on just turn the music in Chaos off, then
- get online, then you can turn it back on if you like.
- If you forget about this and can't get online for some reason. Just turn
- the music off and then you might be able to get online easily or Miami
- may have already internally crashed.
- AFAIK this problem only affects Miami, not other TCP/IP stacks.
-
- * NOTE: Above 2 bugs things seem to have disappeared in late 2000. I think
- maybe it was just caused by some weird memory corruption bug that got fixed
- sometime after May of 2000.
-
- * BUG: sm.c will not allow creatures with negative recovery. Thus my
- newfangled Vampire won't work. NOW FIXED.
-
- ************************************************************************
- COMPILE TIME REDUCTION: April 24, 2000
- ************************************************************************
-
- On a reasonably badly-fragemented (not terrible or anything)
- 25Mhz 030 I did a complete recompile:
- smake clean
- smake
- BEGIN: 3:17:42
- END: 3:39:17
- 21 minutes and 35 seconds. The last 50 seconds were just doing
- pool2tex <pool.txt >spells.tex
-
-
- On a fresh reboot with no memory fragmentation on 25Mhz 030:
- smake clean
- smake
- BEGIN: 4:17:47
- END: 4:38:33
- 20 minutes 46 seconds. The last 45 seconds were just doing
- pool2tex <pool.txt >spells.tex
-
-
- I have now made a gst (Include:all.gst) by reading the docs in
- sc:source/all.gst.
-
- I have now modified the makefile to use the GST.
-
- Now I will time a complete recompile using the GST.
- BEGIN: 5:09:46
- END: 5:22:27 with a Slink error 510: _GfxBase symbol - Near Reference to
- data item not in near data section. First reference in cast.c to start.c
- 12 minutes 41 seconds + another 50 seconds for pool2tex = 13 minutes 31
- seconds.
-
-
- While on YAM+IRC with 3 open windows it took this long:
- 6:18:03
- 6:36:03 18 minutes!
-
- Redo timing test with fresh computer and not on internet! No errors
- BEGIN: 12:22:47
- END: 12:36:18 13 minutes and 31 seconds.
-
- If we subtract out the time that the spellmanager consumes in its
- processing of files and the time that pool2tex burns (total of 2 minutes)
- + the 22 seconds spent printing warnings to the screen then using a GST has
- doubled the compilation speed.
-
- I could rewrite pool2tex and the spellmanager and save around 1.5 minutes
- thus bringing the compile time down to only 12 minutes but I don't have
- time for that right now.
-
- If I then switched to using a 25Mhz 040 then the complete recompile time
- should drop to about 4 minutes. Or if I bought a 66Mhz 060 then I could
- get it down to 1.8 minutes.
- ************************************************************************
- END COMPILE TIME REDUCTION: April 24, 2000
- ************************************************************************
-
-
- * SOUND BUG PERSISTS! I just played a test game and sometimes the end of
- turn sound randomly does not play when I press the end turn gadget!
- ARRRRGGHH!!!
-
- HORRIBLE BUG: Twice today when I was shooting something the game totally
- freaked out and locked up. Well once it crashed the whole machine and the
- other time it locked up. AFAIK this is related to the speech/sound
- channel bug. The only way I know of to fix this is to remove the
- computerized speech from the game permanently.
-
-
- BUG: My ally cast Bless and the ChaosWavyTask triggered off
- 5 MuGuardianAngel hits: All are word reads:
- 42ed8, 42ecc, 42ed0, 42ed4, 42ed8.
-
- MuGuardianAngelBug: Whenever there is a hit, MuGuardianAngel makes some
- kind of beep that completely corrupts the sound system. It causes the
- current sound effect or the very next one to run in an infinite loop.
- Sending a ctrl-c to the JCsound task stops the infinite loop but the game
- is still locked up. Pressing ctrl-c in cpr is useless.
- Maybe this is actually caused by the "heavy cpu load bug" that I found
- later on. A hit stops all tasks for around 1 second.
-
-
- FACT: JCsound cli program works perfectly when I run it from the shell.
- FACT: using JCsound from within Chaos via Execute("run ram:chaosdir/JCsound
- filename -2 >nil:",0,0); causes random enforcer hits and crashes.
- FACT: Many years ago I made a Star Trek game. It worked perfectly.
- Then one day I put digital sound effects in the game using this exact
- same technique. Only it was just some sound sample player program that
- I had, I don't know where it came from. So it was coded by a totally
- different person using totally different techniques. I called the cli
- sound player program using the exact same Execute(); technique and from
- that moment on the game started randomly crashing and locking up. I
- never figured out what was going on with that. Now I think there is
- just plain a bug in using Execute() with programs that use audio.device.
-
- I JUST TESTED THIS CODE from within Chaos
- FOR (t=0; t<40; t++) DO
- Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
- Delay(300);
- NEXT // t++
- It worked perfectly. No mungwall hits, no enforcer hits. Now I'm
- back to thinking it is somehow a bug caused by some conflict between the
- algorythmic sounds and the digital sounds. I tried it with a
- Delay(100) and it still worked perfectly.
-
- * I just set the priority of the narrator speaking to 127 (MAXIMUM) so that
- nothing can steal its channel in the middle of it saying something.
- Perhaps this will fix the speech bug?
-
- Ok I just #ifdef'ed all the audio code out of the game. I turned off the
- speech with the menu and played a test game. It worked for quite a while
- but then the SAME old audio bug came back to haunt me! The 4th thing I
- killed with my Ghost caused the JCsound to freak out and cause enforcer
- hits then the whole computer crashed and reset! Why is that JCsound works
- perfectly under test conditions but crashes randomly in the real game?
- I think this must be related to cpu load now. I'll do more tests with the
- CPU loaded up with stuff to do.
-
- Ok I ran the above code loop test at Delay(100) with a gameboard that had
- around 25 animated creatures on it. Everything worked perfectly.
-
- So then I switched to ExplorationMode because that burns a lot more cpu
- cycles and ran the test again. It was working and had played a few samples
- then I clicked on my YAM icon (I had yam already running but it was
- iconified). This used 100% cpu power for about 2 seconds while it sorted
- through the 604 incoming messages in my mailbox. This caused 1 instance of
- JCsound to "hang". So that now the loop is playing a sound sample then
- failing, then playing then failing in an alternating pattern.
- I believe this is caused by doing a Wait on a certain bit and then only
- getting 1 message when in fact 2 or more messages may have already arrived.
-
- * HACK FIX: I have set the priority of JCsound to run at 126.
- Actually JCsound was ALWAYS supposed to have been running at priority of
- 126 or 127 since it barely uses any cpu time and it must run at a high
- priority to ensure that there is no buffer underflow.
- Now that I have set the high priority the above test works perfectly!
- However there is still something fundamentally wrong with the
- architecture of the JCsound cli command. And someday if some other running
- task does a Forbid() for 1 or 2 seconds the bug will come back.
- But at least the game should now run perfectly under "normal" conditions.
-
- I played a test game with no algorythmic sounds and no speech and the VERY
- FIRST digital sound effect (Combat/Ghost) crashed the machine!
-
-
- I repeated the test under extra heavy cpu load. I was decompressing all
- the jpegs in a directory. No bugs, no flaws.
-
- So why does it work perfectly when I do it in the test loop but it crashes
- so often when I play it as an attack sound during combat????????
-
- Countless other tests producing various results ad nauseum...
-
- * DOUBLE BUFFERING BUG FIGURED OUT!! First of all the entire bug is a
- simple buffer underflow error. However I wasn't correctly handling the
- incoming messages so JCsound could hang and never exit. I still haven't
- figured out why it would crash.
-
- * THE REASON why it was crashing after I had set its priority to 126 is
- this:
- 1. I ran the JCsound program from the shell to test it. JCsound set
- itself to pri 126, did its thing and exited. I had no idea that the CLI
- inherits the priority of every program that you run in it! JCsound never
- set its priority back down to 0 so the default priority of that CLI
- became 126!
- 2. It worked great in the shell so I then ran Chaos from the CLI.
- This means Chaos was running at priority 126! So this completely
- nullified the effect of running JCsound at pri 126! JCsound was still
- having to battle Chaos for cpu time!
- Since the default buffers of JCsound are only 30k (a bit more than
- 1 second) the buffers were underflowing and messing up.
- So anyway running Chaos from that CLI caused the JCsound program to
- crash.
-
- * JCSOUND ALL FIXED NOW!
-
-
- DO A TEST:
- FOR (t=0; t<40; t++) DO
- SayCreatureName (0);
- Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
- Delay(11);
- WaitJCsound();
- NEXT // t++
- IT WORKS PERFECTLY!!!
-
-
- FOR (t=0; t<20; t++) DO
- StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
- Delay(350);
- endmod();
- Delay(5);
- Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
- Delay(11);
- WaitJCsound();
- NEXT // t++
- First 1 worked, second one failed! Finally a reproducable error!!!
-
-
- Countless more tests and crashes later...
-
- I can play a mod and then a sound sample.
-
- But I can't play a subsong in a mod then a sound sample. It crashes the
- machine. Something about playing subsongs is corrupting the audio.device.
-
- Ok I modified the start routine so now at least it always starts playing
- correctly. However, upon stopping the subsong, the next use of
- audio.device still crashes.
-
- I tested this with a stopmod() before the endmod(); It still crashes :(
- StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
- Delay(350);
- stopmod();
- endmod();
- Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
- Delay(11);
- WaitJCsound();
-
-
-
- // This one crashes too! :(
- StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
- Delay(350);
- StartMod("Music/Mod.ChaosTheme42",0); // song 5 is ONLY the artifact changing music.
- endmod();
- Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
- Delay(11);
- WaitJCsound();
-
-
- // This works!!!! (although there is a slight audio glitch at the end
- // because it plays song 0 for 1/50th of a second before stopping the mod..)
- StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
- Delay(350);
- StartMod("Music/Mod.ChaosTheme42",0);
- Delay(1);
- endmod();
- Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
- Delay(11);
- WaitJCsound();
-
-
- // This crashes as usual.
- StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
- Delay(350);
- loadmod("Music/Mod.ChaosTheme42");
- Delay(1);
- endmod();
- Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
- Delay(11);
- WaitJCsound();
-
- // This doesn't crash but the volume stuff doesn't work on medmods.
- StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
- Delay(350);
- loadmod("Music/Mod.ChaosTheme42");
- Delay(350);
- mvolume=0; // All this volume control stuff has NO effect on medmods
- playing=1; // because the medmod replayer code being used is not
- playervolume(); // not set up to handle volume changes! :(
- playing=0;
- playmod(); // or plmod()
- Delay(350);
-
- endmod();
- Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
- Delay(11);
- WaitJCsound();
-
- Perhaps make a an empty pattern to jump to? Blah. To much trouble.
- Then I can play song 0 but pattern jump to an empty pattern that makes no
- noise. Blah. To much trouble.
-
- I could simply StartMod("SomeStupidEmptyMod",0);
- That mod could either do absolutely nohthing or it could play an instrument
- on all 4 channels. But first it would set all 4 channels to volume 0!
-
-
- April 28th: The AC compressor in my car broke. It was making loads of
- smoke. Ack. I've only been driving the car for 3 months! I spent $1700
- to buy it + $400 repairs (new brakes) the first day I drove it to work.
- Now I can either get a rebuilt AC system for $853.10 with 3 month warranty
- or a new one for $1153.79 with 1 year warranty.
-
-
- The _only_ good thing about this is I had to miss work on the 29th, 30th
- and 31st so I was able to spend all day fixing all Frédéric's bugs.
-
- *************************************************************************
- Fri, 28 Apr 2000 11:19:21 -0700 (PDT) Bug report from Frédéric
-
- > Denotes the writing of Frédéric
-
- The responses are written by me (James Conwell)
-
-
- > * When an alliance is made, it should end at the end
- > of the game, but actually it is valid again for the next game.
-
- This is NOW FIXED.
-
- I beleive that setup options should stay the same
- from one game to the next unless you change them.
-
-
-
- > * The giant spider is said to be poisonous IIRC, but
- > it isn't.
-
- I don't remember it ever saying that.
-
- In the current version the spider is not poisonous
- and it doesn't say it is poisonous.
-
-
-
- > * You said in the readme that killing a generator
- > would give 4 bonus spells,
- > but I only got one (it was not a bipedal, aviary or
- > dragon nest, but a full-blown generator).
-
- Wow! Someone actually reads the readme! :) I think
- you must be about the only person to do such a thing
- :)
-
-
- You only get _1_ spell. But you get to pick it from
- a list of _4_ spells. This way your chances of
- getting a REALLY good spell are greatly increased.
-
- The only way to get to pick more than 1 bonus spell
- is to earn more than 1 bonus spell in 1 turn. This
- usually means you must kill more than one bonus
- monster/thing in one turn.
-
- There are other ways which I will leave for you
- to discover :)
-
-
-
- > * Abduction seems to be broken. It did work in v2.3d
- > but it v2.5d the abducted creatures became independent.
-
- I spent 20 minutes testing out Abduction and I found out that
- Abduction was totally broken! It didn't "immediately become independent
- again", it NEVER EVER changed the ownership of anyone ever!!!
- (unless you were player 1 and you abducted cell 1... or if you were player
- 2 and abducted cell 2 etc.)
-
- I always knew I hated the Abduction spell for some reason. Now I know why.
- Because it didn't work!
-
- I went back and checked v2.5 and v2.3 and the programming for Abduction
- was identical so it appears to have had the exact same bug as v2.71.
-
-
-
- > * (haven't tried yet with v2.5d) The turmoil spell
- > was broken in v2.3d: the
- > creatures were moved but somehow retained their old
- > positions by some
- > respects. And mounts were moved but not the wizards
- > mounting them (which
- > merely disappered and were still able to cast
- > spells).
-
- I wish you had reported this bug earlier! :)
-
- Someone beat you to it and reported this very bug a
- couple of weeks ago and I fixed it the next day.
- Turmoil was broken from the day it was implemented until v2.81.
-
-
-
- > * You say that Bahamut is unique but I've frequently
- > (when playing with lots of scrolls) cast several platinum dragons.
-
- Yes the description of the Platinum Dragon has always bothered me.
- It has never been unique despite what the description said.
- I've just been waiting for someone to complain about
- it to give me an excuse to fix it. I have changed the description to
- no longer say it is unique. NOW FIXED.
-
-
-
- > * When using charm, you could convince scrolls to
- > come on your side ! I can't imagine it's intended.
-
- hehehehe this is hilarious!
-
- After thinking about this a while I've decided to leave this the way it is
- so that way Charm has an extra secret use when playing in Exploration Mode:
- It can help you map out the level and show you where some of the scrolls are!
-
- Ok, I admit that it makes no sense to be able to "Charm" a scroll... but
- it does make the Charm spell more interesting.
-
- We'll just leave it like it is until more people form opinions on this
- matter. If anyone has an opinion on this matter please write me and let me
- know.
-
- It needs further testing in Exploration Mode.
-
-
-
- > There are many other little things I don't remember
- > at the moment but I'll note them down so I can tell you.
-
- Yes please note down any bugs or discrepancies that
- you find. I can't fix a bug if I don't know about it.
-
- If you don't write them down immediately, you'll
- forget them like I do :(
-
- You should keep your Cygnus Ed Professional running
- with a .txt file of possible bugs/weirdnesses/flaws.
-
- > Anyway Chaos is really a great game, and
- > I'd like to see an update!
-
- > ----- Bug Report Part 2: -----
-
- > Now the things I wrote down today:
- >
- > * There is no difference between the effects of the magic knife and the
- > magic sword: both add 3 points of combat ability to the wizard and enable
- > him to attack undeads. I think the magic knife should not add combat
- > points, just be effective against undeads.
-
- This has bothered me for years. I just never got around to changing it.
-
- Today I have changed it so that Magic Knife gives only +2 combat and
- Magic Sword still gives +3 combat.
-
- Technically a Magic Knife should only give +1 combat and a Magic Dagger
- should give +2 combat. But I was afraid people might confuse "Magic
- Dagger" with "Poison Dagger" so I left the name of the spell as "Magic
- Knife"
-
-
-
- > * My gray elf is engaged to an earthquake ! I just cast "No grow" on that
- > earthquake to which my gray elf was adjacent. It's like it's behaving like
- > a creature, as someone just cast dark power on it ! :-) And another was
- > just brain-drained. Somehow they are still growth because "no grow" can be
- > cast a second time. But this attribute is not highlighted in the second
- > info panel.
-
- hehehe this all sounds hilarious! :)
-
- There is also another problem: If there is a sea of growth and you cast No
- Grow on a line of the growths to form a "wall" of non-growing growths then
- nothing stops the other growing growths from growing over the nongrowing
- growths. Doh! So I am changing No Grow to make the growth become inanimate
- as well as making it lose the Growth attribute. Growths don't grow
- over inanimate objects (except for the Earthquake) so now growths
- cannot grow over the things you cast "No Grow" on. And you won't
- get engaged to them now and you won't be able to cast Brain Drain or
- Justice on them either. NOW FIXED.
-
- * BUG: You can cast No Grow on something then cast No Grow on it again and
- again. This is silly and wasteful and not what I intendended. NOW FIXED.
-
-
-
- > * I think there should exist a counterpart to range boost: some sort of
- > "range drain"... Currently (v2.5d), only invulnerability or reflector can
- > save you from range combat. And it only applies to the wizard!
-
- I already added in a Range Drain Beam spell back in v2.7. You need to
- upgrade.
-
-
-
- > * The only way to add recovery to some attributes like intelligence or
- > agility seems to be the "touch of God" (or chaos lord :-) ). Why not add a
- > feature like you did for magical resistance: e.g. add some intelligence
- > recovery points if the brain boost is applied to a creature with max
- > intelligence ? Same for agility, combat, range combat, maybe others ?
-
- I will take this under consideration.
-
-
-
- > * When playing with many scrolls, sometimes a "radioactive land" scroll
- > appears. It has no description (empty screen) and any creature entering or
- > shooting in that cell dies. But it's labelled as a scroll.
-
- I fixed this today. Read below for more details.
-
-
-
- > * I can remember one time (with v2.3d) someone had cast "eye for an eye".
- > The manticore my wizard was riding killed a creature of that wizard, so it
- > died. But my wizard hadn't reappeared ! It could cast spells but was nowhere
- > on the board. I don't know if this bug is still there...
-
- Well I played a test game just now on v2.81 and my Wizard was riding a
- manticore and he killed the other wizard's manticore (which was being
- ridden by him). We both had Eye for an Eye. Everything worked perfectly.
-
- End Frédéric bug report.
- **************************************************************************
-
- * BUG: Computer creatures will NEVER move onto a Pit Scroll or a Radioactive
- Land Scroll. NOW FIXED.
- * BUG: Computer creatures will NEVER shoot a Pit Scroll or a Radioactive
- Land Scroll. NOW FIXED.
- * BUG: Any creature moving onto a Radioactive Land Scroll dies. NOW FIXED.
- * BUG: Any creature moving onto a Pit Scroll dies. NOW FIXED.
- * BUG: Any creature shooting a Radioactive Land scroll dies. NOW FIXED.
- * BUG: Shooting a Pit Scroll says "Wasted Shot" and does not kill the
- Scroll.
-
- * BUG: When playing with Scrolls, sometimes a Radioactive Land Scroll
- appears. But Radioactive Land isn't even a real spell that can be cast.
- So I must either:
- A) Never allow a Radioactive Land Scroll to appear in the first place.
- B) Rewrite the Radioactive Land spell to be a "real" spell.
- What should I do?
- It is my belief that Sean intended that Radioactive Land should not be a
- "real" spell so I will simply modify the scroll code to never generate one.
- uhhh... what the hell.... There is already code to prevent spells of 0
- probability being placed as scrolls.
-
- * BUG: QueryProbability() is BROKEN! It has never worked! It always
- returns the probability of the spell above it in the list!
- NOW FIXED!
-
- * BUG: SetProbability() is BROKEN! It has never worked! It always sets the
- probability of the wrong spell! NOW FIXED!
-
- * BUG: All saved game files have the wrong probability matrix saved in
- them. I DID NOT FIX THIS. New games will be saving the numbers correctly.
-
- The only reason spell probabilities were correctly displayed on the spell
- information screen is because the code was hacked to say:
- QueryProbabilty(spell-1);
-
- Note to Sean: Please please please don't write any more functions that
- require a real number - 1. Please make the functions require a real
- number instead of a real number -1.
-
- Please please please don't write any more arrays that require an index real
- number -1. Please make the arrays require a real number instead of a real
- number -1.
-
- If this means not using the 0th element then that is totally ok.
-
- The SpellProbability[] array is still off by 1. I only fixed the functions
- to take a normal parameter. Rewriting the SpellProbabilty array to use
- normal numbers requires rewriting various pieces of code that have lots of
- +1 and -1 convolutions due to the array being set up wrong in the first
- place. Leaving this for SAI to fix.
-
-
- Now that I have fixed those probability functions, Radioactive Land Scrolls
- and other 0 probability spells will not be showing up anymore!
-
-
-
- ???: I moved my Dire Wolf to within 3 squares of a Ghast and yet
- my Dire Wolf did not smell him!! He was _exactly_ 3 squares away.
- OK, this is because the Dire Wolf's smell requires line of sight and the
- intervening unexplored squares block line-of-sight. So actually it is
- technically working the way it is supposed to.
-
- I could change it so that the Dire Wolf's sense of smell does not require
- LOS. This would make it more realistic when there are empty unexplored
- squares between the wolf and the other creature. But it would make it less
- realistic if there were 2 solid walls between the wolf and the other
- creature. This would be easy to do.
-
- I could change it so that the Dire Wolf's sense of smell requires LOS but
- the LOS checking could be changed to use what is REALLY in the cell. Thus it
- would ignore empty unexplored cells. This would require real work...hmm...
-
- If anyone has any opinions on this subject then please let me know.
-
-
- * STUPID: The computer cast Combat on a Bolter Wall! NOW FIXED.
-
- If the Bolter Wall was an inanimate object in the first place, none of
- these Bolter Wall bugs that we've had over the years would have ever
- happened.
-
- * BUG: My dragon killed a wizard who just cast some trees. The game made the
- death sound of a dragon for each tree that then collapsed. (8 times).
- This is because I was using isDragon(id) instead of isIDdragon(id).
- NOW FIXED.
-
- * BUG: Mass Morph is broken! It _ONLY_ morphs generators!
- I have changed it to morph all creations EXCEPT generators. NOW FIXED.
-
- * FLAW: Casting Mass Morph on something belonging to Nobody results in all
- empty cells being morphed into Magic Wood Trees. NOW FIXED.
-
- * BUG: Sometimes the growths of dead wizards are growing all over the
- board. Explanation: a wizard cast some trees on some fire and other
- growths. When he dies all the visible board is put to sleep. Then the
- trees explode, thus causing those growths to go back to the visible part
- of the board. In this manner the growths owned by the dead wizard escape
- being put to sleep or silently removed. NOW FIXED.
-
- * NEW BEHAVIOR: I don't know if anyone ever noticed or not but it used to be
- that when a wizard died, most of his buried creatures were silently removed.
- I have now changed this so that they are merely put to sleep.
-
- * COMPRESSION of Saved Games implemented using lha. From now on when you
- save a game as "Blah" it is lha compressed into Blah.lha. Attempting to
- load a .lha save file autodecompresses it. This saves about 70k per save
- file.
-
- Before Compression : After Compression
- JamesConwellLevels: 222556 9573
- SAI_Levels: 667618 29236
- Total: 890714 38809
-
- SAVED 851K!!!!!!
-
-
- Tuesday May 16th, 2000
- I've been ripped off at my job each day for several days now. I have been
- extremely stressed out for over 1 week now and have done almost nothing.
- Today I talked to an attorney and I finally calmed down enough to be able
- to do some coding:
-
- * AUTOSAVE FEATURE IMPLEMENTED: This feature defaults to ON. It will save
- the game automatically on EACH human wizard's turn. Each save is done into
- a different filename. Example filename "004p8AutoSave.lha". This means
- that this is the savefile for turn 004, player 8's turn. The turn number
- is first so that the files will list in numerical order in the
- filerequester.
-
- From now on if you find a horrible bug that crashes the machine or
- something you can ALWAYS go back to your last saved position (Because it is
- saved automatically). You can then replay the turn over and over again
- to figure out exactly what it is that is triggering the bug. This should
- greatly benefit playtesters the world over.
-
- * IMPLEMENTED all of Frédéric's spell-description corrections/clarifications
- for all spells beginning with the letters A-E.
-
-
- ===========================================================================
- * BUG: Disrupt drains the intelligence of creatures which are your allies.
- NOW FIXED.
-
- This seems like a good time to vote on the Disrupt spell:
-
- This spell causes a momentary lapse of vision in all enemy
- creatures. It can prove fatal to weak minded creatures and causes permanent
- damage to the cerebral cortex of those that survive. This spell currently
- does not affect wizards, growths, inanimate objects or scrolls.
-
- Frédéric has proposed that Disrupt should be changed to affect
- wizards. Do you have an opinion on this?
-
- You can vote for, against, or no opinion. Or whatever you want 8)
-
-
- New Zealand makes this statement:
- My general opinion is that it should be difficult to kill wizards
- with "at a distance" type spells. I know there are other execeptions
- to this already, e.g. curse.
-
- However, since the disrupt spell is relatively rare, I don't see a
- problem with making the change. It is definitely best to have it
- not affect growths, since otherwise it would kill most of them.
-
-
- Hungary has this to say:
- After I've searched what does it mean the "cerebral cortex" expression, my
- opinion is the follow:
-
- If it is the same like brain drain, but it has effect on the whole playing
- area, I say: OK, let it has affect on the wizards and all object (all means
- EVERYTHING). Let's rise up the CHAOS!!!!
-
- JC replies:
- Since the description says it affects the cerebral cortex it should only
- affect creatures. Inanimate objects and growths do not have a cerebral
- cortex. Technically this spell should not affect the Robot, but that is
- an issue for another time 8)
-
- I feel that since the spell does not require line of sight and since it
- already affects huge numbers of enemies I am mostly against applying its
- damage to wizards.
-
- If you are playing a game against 7 enemy wizards and each wizard has 4
- creatures on the board then casting Disrupt will damage 28 enemy creatures!
- Isn't that enough?
-
- Also you don't have to pick a particular enemy to damage. It just damages
- ALL enemy creatures. Therefore I am mostly against the proposal.
-
- However, since the spell only does 2 points of damage to intelligence
- combined with the fact that it is very rare, I'm not totally against it.
- Thus I vote -.75 points.
-
-
-
- France votes FOR this proposal: +1.0 point
- New Zealand votes Neutral/For this proposal: +0.5 points
- Ireland abstains: 0.0 points
- USA votes +1, -.75 +0.25 points
- -------------------------------------------------------------
- TOTAL: +1.75 points
-
- Proposal Passes and is implemented on May 20th, 2000
- ==========================================================================
-
- * Created a MakeDemoOfChaos.txt AmigaDos script file to copy all the files
- needed to create a playable Chaos distribution into a Chaos/ dir.
- I actually used this to make a registered version of Chaos 2.81. DONE.
-
-
- Version 2.81 installed on JJ's computer on Monday, May 22nd, 2000.
-
- END OF VERSION 2.81
-
- BEGIN VERSION 2.82 International Language Version.
-
- * IMPLEMENTED all of Frédéric's spell-description corrections/clarifications
- for all spells beginning with the letters F to Z. Including complete
- rewrites of Magic Attack, Magic Bolt, Ice Breath, Lightning, X-Ray and
- Fireball. DONE.
-
- * CHANGED Pythons so they attack Life Force + Manuverability.
-
- * ADDED a new "Language" menu option with English, Français, Hungarian,
- Deutsch, Español and Italiano options. All options are mutually
- exclusive.
-
- * BUG: Hold down the RMB. Now select any language then select another
- language (DO NOT RELEASE THE RMB DURING THIS TIME). The 2nd language you
- selected will be correctly highlighted and the 1st language will be
- correctly unhighlighted. But internally the program still only knows that
- you selected the 1st language, thus the Language variable is now set to the
- WRONG value! Ok, after some hours studying the RKRMs I worked out how
- to handle multiple selections in 1 MenuHandler() call. NOW FIXED.
-
- * Above fix has hopefully now prevented numerous other Menu problems from
- ever happening.
-
- * ADDED some text to print when a promotion happens.
- * ADDED some text to print when an Orc/Goblin/Troll gets a bow.
- * ADDED some text to print when the game is AutoSaving.
-
-
- -------------------------------------------------------------------
- JJ complaints on May 25th, 2000:
- 1: Range Boost didn't work on his Wizard with a Magic Bow. NOW FIXED.
- 2: He doesn't like the digital sound effects and wants a "Combat Sounds"
- on/off feature. This took me 2 hours. 1 hour to do it and and 1 hour
- to debug it due to lame C STUPIDITY. I wrote IF (MENUCombatSound)
- and the compiler generated NO ERRORS! But there is no variable called
- MENUCombatSound!!!!! And it didn't call the FUNCTION
- MENUCombatSound() either! It just always evaluated the nonexistent
- variable as TRUE so the sounds were ALWAYS ON no matter what I did.
- NOW FIXED.
- 3: The graphics on the info panels on his A3000 are in different
- proportions to the graphics on the main screen. He doesn't like this.
- This is due to limitations of the A3000 graphics chips, sorry.
-
- You can either:
- A) Redesign all 1000 graphics in the game by doubling their size
- vertically and then hand editing them to smooth out the resulting
- blockiness. Assuming you can edit 5 graphics per hour this should
- take only 200 hours.
- B) Buy an Amiga 4000 or a suped-up Amiga 1200.
- -------------------------------------------------------------------
-
- * INTERNATIONAL LANGUAGE SUPPORT ADDED! (Only for Spell Descriptions)
- IT WORKS GREAT! Currently the only languages supported are English,
- Français and Hungarian. The font still needs to be edited to contain
- accented characters, this is Frédéric's department.
-
- * ELIMINATED all those stupid spell+1 and spell-- and spell+=1 constructs
- from SpellInformation(). This was all caused by PoolPos requiring a
- spellnumber-1 instead of a real spellnumber! NOW ALL FIXED!
-
- * ENFORCER HIT BUG! Selecting "Scores" from the Menu somehow corrupts the
- value of the Global Variable "Language" and sets it to 8. Then anything
- that uses the Language variable to access an array triggers off enforcer
- hits. Hmmm... this was all caused by a missing break; after a
- END_SWITCH. I guess most END_SWITCH statements need a break; after them.
-
- * Wolverines now scavenge +3.
- * Achiyalabopa now needs LOS for its sight range due to the fact that it is
- "low-flying".
-
- * Wednesday, May 31st, 2000: Installed version 2.82 onto JJ's computer.
- My optical drive got tons of write-errors and it was a major problem to
- copy the game onto it. I don't know what I will do for the next version
- :(
-
- BEGIN version 2.83: Continuation of International Language Version.
-
- * Hidden Horror + Reincarnation Bug Report by Frédéric:
- I had cast reincarnation on my hidden horror so as to get a golden dragon
- when it came close to that combat-enhanced enemy wizard (like this is said
- in the hidden horror description), but I only got a red dragon.
- NOW FIXED.
-
- * Added in some code to read in all the catalog files.
-
- To preserve file attributes on extracted lzx files type the following:
- lzx -a x filename
- lzx -a x filename dirname
-
-
- * REPLACED most of the text in the game with an appropriate call to
- Message() which gives the correctly translated string according to the
- currently selected language.
-
- * PROOFREAD, corrected & edited Frédéric's new doc sections on creature
- statistics and spell statistics.
-
- =========================================================================
- Begin Catalog Translation Problems
- =========================================================================
-
- Ok now I've had some serious problems over the last few days.
- #1: French grammar is backwards when compared with English grammar so my
- catalogs are useles. But the solution is VERY easy, simply make use of the
- new sprintf() (or related) routine in the Amiga OS that allows the
- translator to switch the orders of the parameters around using positional
- notation such as %1$s %2$s %3$ld.
-
- #2: Well great, the only way I can figure out to use the new sprintf
- in Amiga.Lib instead of the SASC sprintf is to link with Amiga.lib first.
- But this is TOTALLY unacceptable because then the Amiga.lib printf would
- replace the SASC printf and the amiga.lib version is totally bugged and
- lame and worthless.
-
- #3: Amiga.lib sprintf doesn't support many of the features of "real"
- sprintf routines in C compilers. For example it doesn't have floating
- point support. :(
-
- #4: Amiga.lib sprintf is lame and expects 16-bit ints. Ack. So all %d and
- %c must be changed to %ld and %lc to compensate for this.
-
-
- SOLUTION:
- #1: We will have to continue to use the SASC sprintf for floating point
- formatting and possibly other types of formatting. The sprintf statements
- using floating point will have to be broken apart into multiple steps.
- Fortunately there is only 1 place in the game that uses a floating point
- number in a translation string. So this will be dead easy. The other
- floating point uses of sprintf are purely numerical and will not be
- translated in a catalog file.
-
- #2: I will implement a new JCsprintf routine which uses the totally cool
- positional notation of AmigaOS RawDoFmt() and amiga.lib sprintf, etc. I
- thought about calling it Sprintf but I figure we might get them mixed up, I
- couldn't really decide what to do about this... Maybe we should call it
- Tsprintf since it is only required for use with strings which are being
- translated from 1 language to another.
-
- #3: This new Tsprintf routine is simply an asm routine that calls
- RawDoFmt() with a function parameter to store the chars in a buffer. WHY
- OH WHY doesn't RawDoFmt() default to sprintf string-storing when supplied
- with a NULL function parameter?
-
- This asm routine came straight out of the RKRM example listed under
- RawDoFmt()
-
- This should solve all the _current_ translation problems. Other
- translation problems will be dealt with later.
-
- * I went through and added numeric positioning information to EVERY string
- that had more than 1 parameter.
-
- * I basically copied the prototype from sprintf() in stdio.h to use as the
- prototype for Tsprintf(). Though first I compiled the game as a test
- with no prototype for Tsprintf() and no warnings or errors were generated!
- I assumed the game would just crash so I didn't try to play it like that
- till added the prototype and did smake clean smake.
-
- =========================================================================
- End Catalog Translation Problems
- =========================================================================
-
-
- --------------------------------------------------------------------
- Begin Handling Translated Spellnames
- --------------------------------------------------------------------
-
- Decide how to handle spellnames? Why not handle it exactly the same as I
- handle Message(); ? Yes, exactly like I handle Message, excellent.
-
- Ok, but how do I read them in?
- If I could somehow make a list of all English spellnames. This is easy
-
- duh. I have a list of all English spellnames. Its built into the game!
- creature_name[]!!!!!!
-
- IF (the date of the directory "SpellDescriptions/English" > the date of SpellDescriptions/EnglishSpellnames.txt) THEN
- just do "list SpellDescriptions/English/ quick files nohead >SpellDescriptions/EnglishSpellnames.txt"
- I now have a .txt file of all English spellnames.
- END_IF // ALL DONE NOW. I just copied code from handling the sound effects.
-
- Above paragraph is all useless! I need French names of OBJECTS in the game,
- not french names of english names.
-
-
-
- Now go through each name in the this list and open up
- that filename in each language/ dir and dig out the language/ version
- of it and put it into an array! Easy! DONE.
-
-
- * Make a CreatureName() macro that returns the creature_name of the
- creature in the currently selected language. DONE.
-
- * Go through the entire game and replace all appropriate occurrences of
- creature_name[x] with CreatureName(x) except the ones in editor.c.
- I'll worry about that later. Certain occurrences of creature_name[x]
- specifically must NOT be replaced because they are dealing with files
- (sound files, text files, etc.) and those files must always be named
- according to their english name. DONE.
-
- Check the date of the LanguageSpellnames.txt against the date of the
- dir Language/ If the dir is newer then it means something has changed and
- the text files must be rebuilt. So if the Language/ dir is newer than the
- LanguageSpellnames.txt file or the EnglishSpellnames.txt file or the
- English/ dir then it must be rebuilt. Additionally, if the English .txt
- file gets rebuilt then they must ALL get rebuilt because it might mean
- some new spells have been added.
-
- So in the end I'll end up
- with a 350 line FrançaisSpellnames.txt
- and a 350 line MagyarSpellnames.txt
- etc.
-
- Line 1 is the translated name of object 1.
- Line 2 is the translated name of object 2.
- etc.
-
- * PROBLEM: It takes several seconds to open/read/close the 350 files
- required to read in the translated spellnames. (And its only doing Français
- now! That will be over a whole minute when all languages are done.)
- So I optimized it such that the list only needs to be rebuilt if someone
- has changed something in one of the descriptions. NOW FIXED.
-
- * TRANSLATED SPELLNAMES ARE NOW FULLY FUNCTIONAL.
- --------------------------------------------------------------------
- End Handling Translated Spellnames
- --------------------------------------------------------------------
-
- * Changed "Hungarian" -> "Magyar".
-
- ----------------------------------------------------------------------
- Email from Frédéric "Frédéric's Folly" :)
- ----------------------------------------------------------------------
- Too bad my stupid screen grabber overwrote the screen grab I made earlier,
- it was very impressive ! I played with 30 scrolls and my wizard appeared
- next to a fir with combat on his spell list. With the help of a stone giant
- I destroyed the tree and it revealed a Chaos lord spell !! I cast it then
- replicated (with triple active) myself. I destroyed 4 generetors and 2 enemy
- wizards in only one turn :-) !! I had to pick 6 spells among a big list, and
- there was 1 Generator and 2 touch of God spells in it ! I was awesomely
- powerful.
-
- Then I made a stupid mistake. One of my replicates got burried by an orange
- jelly. I rescued him but forgot he was only at half of his _initial_
- strength. He got killed by a stone golem next turn. And it was my main
- wizard so I lost.
-
- One thing I don't understand is how it is decided which wizard is the
- casting wizard. It seems to change each turn. Is it random ?
-
- Reply from JC: The spell description warns that casting Replicate on one's
- own self can be very disorienting. It means what it says. 8)
-
- ----------------------------------------------------------------------
- End Email from Frédéric
- ----------------------------------------------------------------------
-
- * June 13th, 2000: Received Patrick's 2nd registration from Ireland. YAHOO!
- Compiled v2.83 and Emailed it to him on June 15th, 2000.
-
- The actual size is about 8.18 megs.
- The .lha archive size is about 5 megs and
- the email size is about 6.6 megs.
-
- * June 17, 2000: Received Frédéric's registration. He is now inducted as a
- junior member of Team Chaos and assumes all privileges and
- resposonsibilities associated therewith.
-
- He is also Chief Executive Vice President in Charge of Français
- Translation, Français Font Editing and also English and Français
- AmigaGuide Electronic Hypertext Documentation.
-
- Saturday, June 17th, 2000: I loaded my very first IFF graphic file into the
- game and displayed it. AMAZING! All these years I've never once loaded a
- graphics file into one of my programs! Though I have loaded IFF _sound_
- files for many many years.
-
- **********************************************************************
- Bug Reports from Frédéric:
- **********************************************************************
-
- * Saving does not work ! I launched Chaos from the shell and got
- messages like
- c/lha: unknown option - 3
- each time the game tried to save the current game (either autosave or
- requested save).
-
- I've finally found why lha complains about the -3 option: it was in my
- ENV:LHAOPTS file, to automatically select the best compression algorythm.
- However, the old lha version supplied with chaos does not know of this
- option. The ideal solution would be that you use the -I option when you
- call lha from Chaos, this will cause lha to ignore the LHAOPTS environment
- variable.
-
- JC: Ok, I changed lha to use -qaI when being called from Chaos. NOW FIXED.
-
- JC>> * I tried to reactivate the lhaopts environment variable but the
- JC>> problem about -3 option arose again. Maybe you should put the -I
- JC>> option before all other options and alone on its dash.
- JC> Please try using the lha that is in chaos/c/ and figure out how to make
- JC> it work.
- JC> Just type it from the shell and try different options and settings
- JC> until it works properly. Then let me know which combination of things
- JC> worked and I'll put it in the program.
-
- When I say "c/lha" I get "invalid option -3".
-
- When I say "c/lha -I" I have the usage summary.
-
- I said "c/lha -Ir a ram:ChaosTest.lha AmigaToPAL" and it worked.
-
- I think the problem is that you mixed options and commands. -Iq are options,
- a is a command "add", not to be mixed with the -a option (preserve file
- attributes). So the following will work:
-
- c/lha -qaI a xxxAutosave.lha ChaosSavedGame
-
- (at least it should). Drat ! I tested it and it doesn't :-(
-
- Okay, when I move -q aside it works:
-
- c/lha -aI -q a xxxAutosave.lha ChaosSavedGame
-
- JC: Ok I have now implemented the above line into the autosave code of the
- game. It doesn't work! Lha keeps warning me that the "I" option must
- appear immediately after a - and before the archive name!
-
- c/lha -I -aq a xxxAutosave.lha ChaosSavedGame
-
- NOW FIXED.
-
-
- * I cast abduction and it abducted a poison dagger scroll ! And it did
- reveal itself as I was trying exploration mode :-)
- JC: NOW FIXED
-
-
- * The proportionnal font you use in the info screens does not know of
- accented letters !! This makes french descriptions for spells totally
- unreadable ! For example "Dévastation" becomes "Dvastation" !
-
- JC: I know all about this. You are in charge of translation so you are
- supposed to fix this.
-
- NOW FIXED.
-
-
- * The special combat ability provided by Aesculapius does not target
- anything ! I think special combat should have a default stat target even if
- the creature has no special combat at all (like range combat). Moreover
- this special combat targets my own creatures too !
-
- JC: This was a simple problem of not enclosing my #define in ()
- NOW FIXED. Aesculapius no longer gives people Special Combat.
-
-
- * "Independent vulture eats some brown bear cadaver. Life +d"
- Seems the %d thing does not work.
-
- JC: This is a problem with that stupid OS sprintf not working with long
- parameters. It only works with words! It has already caused me many many
- problems and this is the whole reason why it took me soooo long to do the
- translation coding. Anyway this particular sentence is NOW FIXED.
-
-
- * I got this error message too:
- ChaosDigitalSoundSubProcess : erreur code 150
-
- JC: You can ignore this one. All it means is that Chaos tried to play a
- sound effect when there were no channels available (like when the music was
- playing). If music had been off at that moment, the sound would have
- played. The actual error message is generated by the OS and there is no way
- for me to suppress it.
-
-
- * I've found another minor bug: when I cast alternography and restart the
- game, the alternography is not reset and remains active.
- JC: NOW FIXED
-
- * "Asleep's wizard munches on some manticore's cadaver. Life +d." Asleep's
- wizard ??? This should not exist (it is not a fake wizard)! Moreover, asleep
- creatures should not eat anymore !
- JC: Well, there was a bug whereby any scavenger that was asleep or dead or
- a scroll would still scavenge any dead bodies that it was on top of.
- NOW FIXED.
-
-
- --------------------------------------------------------------------------
- * Providing someone with a telescope does not increase his mapping of his
- own position in the world until he moves. Too bad if that creature is
- engaged. Maybe the telescope spell should update the explored cell for the
- recipient creature. This update should also happen when a creature blocking
- line of sight moves, revealing some parts of the world. Maybe a good place
- to do this is board update.
-
- Reply from JC:
- #1: Its a rule: if you are engaged then you can't map the world. You are
- too busy defending yourself to have time to draw maps.
-
- #2: Furthermore its a rule that if your creature doesn't move then it
- doesn't map anything. Thus, a creature that never moves will never map
- anything.
-
- #3: I have been thinking of changing the Telescope and Seismology spells
- such that they give results immediately upon casting. Since you asked for
- this I went ahead and implemented it.
-
- So from now on if you cast Telescope or Seismology you will IMMEDIATELY (in
- the casting phase) map new areas.
- --------------------------------------------------------------------------
-
-
- **********************************************************************
- End Bug Reports from Frédéric. (Is there ever an end? 8)
- **********************************************************************
-
-
- * FIXED description of Solar.
-
- * CHANGED: Aesculapius scrolls are now always buried.
-
- * CHANGED: Touch of God, Chaos Lord, Iridium Horse and Aesculapius scrolls
- are now only 1/3 as probable as other scrolls.
-
-
- * END of Version 2.83
- * BEGIN Version 2.84
-
- * CHANGED Cartography to immediately explore the cells during the casting
- phase in the same way that I already changed Telescope and Seismology.
-
- * INSTALLED the new ChaosCalligraphy.font which has been modified by
- Frédéric to include (all?) international characters of Western European
- alphabets. Most notably ¿¡ñÑ éèêëæ ÉÈÊËÆ çÇ etc.
-
- **********************************************************************
- Bug Reports from Frédéric:
- **********************************************************************
-
- > * I cast betrayal on a bolter wall and it said the spell succeeded. But the
- > bolter wall still belonged to the same player.
-
- JC: This has always been possible. If Betrayal succeeds then a new player
- is randomly chosen. In your case it randomly chose the same player as
- before.
-
- I have now changed it so that if the spell succeeds then the target
- _WILL_ change owners. NOW FIXED.
-
-
- > * Sometimes the old EndOfTurn sound is played at the end of a turn, instead
- > of the sound from file "EndTurn.8svx". I did not find a condition for this
- > to happen.
-
- JC: This happened only when someone had previously cast Move It.
- NOW FIXED.
-
- * When I begin a game in exploration mode (as player 1 or 8, never mind),
- the position of player 3 is shown to me before disappearing again. ?
- JC: This one took me a while to figure out. In the beginning of the game I
- changed the PlayerView to 15 so that way absolutely nothing would be shown
- since there is no player 15. But the Team[] only has 12 elements! (0-11)
- so Team[15] was actually accessing into TeamSettings[3] (which keeps a
- backup copy of the team settings so that alliances and seperations don't
- mess up the setup screen) Of course TeamSettings[3] is going to equal 3
- unless you change the Teams on the setup screen. So the game thought that
- player 15 was on Team 3 and thus would show you player 3's position at the
- start of the game.
-
- So how do I fix this?
- A: Expand the Team[] and TeamSettings[] array.
- This requires a change to the savegame format and I would have to
- convert all the old levels to the new format.
- B: I could just not change the view to be 15 at the beginning. I could
- change it to the 1st human player, (since he will get the 1st real
- view anyway) or I could change it to the DEADP player.
-
- Option B is easiest. I will just change the view to the DEADP player.
- This will work perfectly until the game starts randomly distributing dead
- bodies across the map at the beginning of the game. This will probably
- never happen so it should never be an issue. NOW FIXED
-
-
- > * A question about something I wanted to test but I didn't have the right
- > spells on my list. What does an inanimate object becomes when it has been
- > hit by stone to flesh and reincarnate, and then dies ? Does the
- > reincarnation scheme take this into account ?
-
- JC: I tried this and it worked. It said R=0 meaning that it doesn't
- reincarnate into anything. I then killed it and it died as usual. Nothing
- messed up, no crashes, my computer is still running. 8)
-
-
- > * I cast the cat lord, and I had already a lion. I was able to control the
- > lion and attack a harpy with it. Then, after I clicked end-of-turn, the cat
- > lord controlled the lion and attacked the harpy again.
-
- NOW FIXED.
-
-
- > * My wizard has scavenge +4 but does not scavenge the harpy cadaver he's
- > standing on (autosave 020p8). Ah ! I see. Scavengerism is only for
- > creatures with a life force below its initial value, right ?
-
- Correct.
-
-
- > * Another wizard has scavengerism and it works. But he's cloaked and the
- > sentence say he is a wizard munching on some brown bear carcass. I think it
- > should say "cloaked creature" instead of wizard.
-
- NOW FIXED.
-
-
- > * A leopard corpse mewed when it was destroyed by a fireball ! Corpses
- > really shouldn't make any sound :-)
-
- NOW FIXED.
-
-
- > * I'm able to control the solar and make it attack before it attacks on his
- > own !
-
- NOW FIXED.
-
- ========================================================================
- BEGIN HORRIBLE LOCKUP BUG WITH "Repulsion" sound.
- ========================================================================
- * Sometimes the game locks up and makes the Repulsion sound.
-
- JC: This same bug was reported by JJ several times over the last few months
- but the details were so sketchy that I had no way to track it down and
- fix it.
- 10 days later after countless hours of playtesting by Frédéric using
- the JC modified version of Chaos which generates logfiles of its
- actions, I was _finally_ able to track down this horrible bug!!
-
-
- // Begin code copied from CellEffect();
- case TELEPORTIN:
- ObtainSemaphore (&BoardLock);
- FOR (i = 0; i < 8; i++) DO
- IF (i != 7) THEN
- SetAPen (rastPort, WHITE);
- Move (rastPort, x + i, y + i);
- IF (DrawIt) Draw (rastPort, x + CellWidth - i, y + i);
- AUDIONote (2000 - i * 100);
- IF (DrawIt) Draw (rastPort, x + CellWidth - i, y + CellHeight - i);
- AUDIONote (1000 + i * 100);
- IF (DrawIt) Draw (rastPort, x + i, y + CellHeight - i);
- AUDIONote (2000 - i * 100);
- IF (DrawIt) Draw (rastPort, x + i, y + i);
- AUDIONote (1000 + i * 100);
- END_IF
- IF (i != 0) THEN
- SetAPen (rastPort, BLACK);
- Move (rastPort, x + --i, y + i);
- IF (DrawIt) Draw (rastPort, x + CellWidth - i, y + i);
- IF (DrawIt) Draw (rastPort, x + CellWidth - i, y + CellHeight - i);
- IF (DrawIt) Draw (rastPort, x + i, y + CellHeight - i);
- IF (DrawIt) Draw (rastPort, x + i, y + i++);
- END_IF
- NEXT // i++
- ReleaseSemaphore (&BoardLock);
- break;
- // End code copied from CellEffect();
-
- Notice that it always decrements i (i--) but it only SOMETIMES
- reincrements it (i++)
-
- As i happens to be the loop control variable, decrementing it once per loop
- = an infinite loop!
-
- I spent hours looking through the code for constructs like this!!!!
- I SPECIFICALLY looked for ANY FOR NEXT loops in which the loop control
- variable was changed via i++, i--, --i, ++i, or i+=x or i-=x. But I didn't
- look in cell.c because I thought the problem was either in chaos.c where
- the recovery code is or in core.c where tons of low-level routines are at
- that get called millions of times by chaos.c.
-
- NOW FIXED.
-
- What the actual bug was:
- Basic Explanation: Anything that caused the TELEPORTIN or TELEPORTOUT cell
- effects to be used would lock up in an infinite loop making sound. Since a
- simple sound played in a loop is what the "Repulsion" sound is, this sounds
- very similar to the Repulsion spell sound.
-
- Specific Explanation:
- IF you were playing in exploration mode and any of the following things
- happened then the game would lock up.
- A) A roper teleported to a new location.
- B) A creature changed sides due to impurities.
- C) Any Wizard used the Passage spell.
- D) Any Wizard used the Teleport spell.
- E) Any wizard cast Pyrotechnics or Storm and it actually hit a creature.
- F) Any Haunt spontaneously changed sides.
- G) Any Wizard cast the Pox spell on something.
-
- NOW FIXED!!!
-
- So the reason the lockup bug seemed to only happen when you played with
- lots of enemy wizards and with growths on the screen was because, the more
- stuff on the board, the more of a chance of Impurities causing an alleigance
- change.
-
- ========================================================================
- END HORRIBLE LOCKUP BUG WITH "Repulsion" sound.
- ========================================================================
-
- * BUG: When I'm in alliance with another wizard, I can see the regions he
- has explored. However, when a creature is moving in these regions, it
- is not highlighted.
- JC: This bug was a simple typographical error in the code. NOW FIXED.
-
-
- > * About the bug in inamorphobiosis you fixed. I thought the same problem
- > could arise when a wizard mounts a cat (lion, jaguar etc) thanks to "Mount"
- > and another player casts the cat lord. Did you consider this case ?
-
- JC: I just changed it so that Cat Lords cannot take control of mounted cats.
- NOW FIXED.
-
-
- > * After Joker, I got "Wizard 7" on my list ! Is this normal ?
-
- JC: Well, the way Sean programmed it, it could give you any spell, even spells
- with 0 probability. I have now changed it so that it will not give you
- spells of 0 probability. NOW FIXED.
-
- You also reported months ago that you were able to get a Radioactive Land
- spell on your list by casting Joker in v2.5. This was a symptom of the
- exact same bug and is also NOW FIXED.
-
-
- > * I had triple in effect and my marid cast violet fungi. It logically cast
- > it three times, but all at the same place, one on another. This should be
- > considered stupid !
-
- JC: NOW FIXED.
-
-
- > * I first got Burstroem's Browser today. I cast it and began to peek at
- > other wizards spell lists. When I play with Texas Trash'em, I can peek at
- > others spell list when I have already picked a spell to cast and the game
- > is waiting for me to discard another one. However, when I get back to my
- > list, the spell I had picked to cast is displayed again.
-
- JC: NOW FIXED.
-
-
- > * When a growth is hit with "No grow", it becomes inanimate, so the
- > animation should be stopped.
-
- JC: NOW FIXED.
-
- **********************************************************************
- End Bug Reports from Frédéric. (Is there ever an end? 8)
- **********************************************************************
-
- * CHANGED: Each Wizard now has a unique name! Instead of 8 creatures with
- the name "Wizard", we now have "Wizard 1", "Wizard 2" etc. This was
- neccessary so that each wizard can have its own unique sound files and
- graphic files.
-
- * BUG: A scroll of a Cat Lord takes control of the cats and makes them
- belong to NOBODY! NOW FIXED.
-
- * CHANGED: Inanimage is now only half as likely to cast Inanimorphobiosis
- or Mass Petrification as he is likely to cast any of his other spells.
-
- Sent new version of 2.84 to Frédéric for playtesting on July 5, 2000.
-
- * CHANGED Ghoul: The description of the Ghoul says that it feeds on others
- so I have now changed it so that it has Exophagy and +2 Scavenging as per
- Frédéric's request.
-
-
- **********************************************************************
- Double-Attacking Bug Reports from Frédéric:
- **********************************************************************
-
- >>> * A floating eye belonging to one of my computer allies was hit by
- >>> singular earthbind. It moved close to an enemy and attacked it... two
- >>> times !
-
- > * The ghoul in cell (3,3) attacked the independent generator twice !!! This
- > is the first time I see this ! Autosaves 27 and 28. It did it again on turn
- > 28 !
-
- > * Another ghoul, in the upperright corner, attacked the adjacent ogre
- > assassin twice ! Autosaves 39 and 40. It just killed the ogre now and got
- > back to its original place. So it really gets two chances to move!
-
- Yes quite right. Any nonengaged computer-controlled creature with >10
- movement points could move twice! NOW FIXED.
-
- **********************************************************************
- End Double-Attacking Bug Reports from Frédéric.
- **********************************************************************
-
- * BUG: Independent creatures and the creatures of computer-controlled
- wizards get to move and/or attack twice if they have more than 10
- movement points and are not engaged. NOW FIXED.
-
- * BUG: Independent creatures and the creatures of computer-controlled
- wizards accrue approximately .24 free movement points for each diagonal
- movement made. NOW FIXED.
-
- * BUG: A computer-controlled wizard who is mounted on an inanimate object
- (such as a centaur that has been hit with Flesh to Stone) can still
- attack and shoot if the centaur is "engaged". NOW FIXED
-
- * BUG: Animate affects scrolls of inanimate objects! NOW FIXED!
-
- **********************************************************************
- Bug Reports from Frédéric.
- **********************************************************************
-
- > * I cast "no grow" on my own gooey blob so that I get many creatures when I
- > subsequently cast "animate". However, it didn't work: I still have my
- > petrified gooey blob. We should either: say the spell only works for trees,
- > or make it affect more inanimate objects (including those petrified by
- > flesh to stone, for example make them creatures again).
-
- JC: I changed it so that now Animate affects petrified growths. NOW FIXED.
- Also it didn't affect Ropers. Now it does.
-
-
- > * When the mount of a wizard is killed, it leaves no corpse behind.
- JC: NOW FIXED.
-
-
- > * When a creature kills a growth covering a scroll, it does not move over
- > the scroll.
- JC: NOW FIXED.
-
-
- > * Desire: on the second setup screen, add the GFLG_TABCYCLE (cf
- > Intuition/Intuition.h) to the string gadgets so that one can move between
- > all the string gadgets without using the mouse.
-
- JC: DONE. I also implemented it on the 1st setup screen.
- TABCYCLE feature added in honor of Frédéric Delacroix, who earned the
- "Playtester of the Month Award" for June 2000.
-
-
- > * Suggestion: Convert could be cast on the inanimate so that it can be used
- > to destroy dark wood. (An enemy of mine is an arborist and cast a line of
- > dark woods close to me).
-
- JC: DONE.
- Convert spell description updated.
-
-
- > * There is an independent solar but it never moves or attack !
-
- JC: NOW FIXED. Tested and works perfectly.
-
-
- **********************************************************************
- End Bug Reports from Frédéric. (Is there ever an end? 8)
- **********************************************************************
-
- ----------------------------------------------------------------------
- - Begin Font Bugs!
- ----------------------------------------------------------------------
- Font in start/quit gadgets is wrong. It is using a system default font.
- Font in Menus is wrong. It is using a system default font.
- Font inside the filerequester is wrong. It is using a system default font.
- Font in text gadgets on setup 1 is Topaz!
-
- If the system default font is really HUGE, as it might be on an Amiga with
- a 1600x1280 gfx card, then the gadgets are really messed up and the menus
- look HORRIBLE and the menus corrupt the screen gfx. The gadgets and menus
- are programmed to ask for an 8 point font and they expect to get it. If
- the font is not 8 points then bad things can happen.
-
- Ok I just added the following line to the OpenScreenTagList() of the main
- screen:
- SA_Font,&PearlFont8textAttr,
-
- THIS DID NOT FIX THE BUG!
-
- I have now tried multiple other ideas. None of them had any effect
- whatsoever. :(
-
- I conducted various experiments and had no luck whatsoever. So then I
- spend the rest of the day discussing this problem with various Amiga
- Programmers and _FINALLY_ Drad figured out the problem and conducted some
- experiments to prove what was going on.
-
- 1. OpenDiskFont() can handle, and really should have, a complete pathname
- in the TextAttr struct. "ChaosGame:fonts/pearl.font" works perfectly.
-
- 2. But when using that VERY same TextAttr struct in a menu or a gadget, it
- will fail 100% of the time due to a "bug" or "improperly documented
- feature" of Intuition. When supplying TextAttr's to ANY intuition
- function, there MUST be NO pathname component whatsoever! And the font
- MUST exist in memory! Only the actual name of the font may be supplied.
-
- So the solution is to have a PearlFont8TextAttrForOpenDiskFont that says
- "ChaosGame:fonts/pearl.font" and a seperate PearlFont8TextAttrForIntuition
- that says "pearl.font".
-
- NOW FIXED.
-
- ----------------------------------------------------------------------
- - End Font Bugs!
- ----------------------------------------------------------------------
-
- Sent yet another new version of v2.84 to Frédéric for playtesting on
- July 12th, 2000. It took approx 41 minutes to compile on my 25Mhz 030.
-
-
- **********************************************************************
- Bug Reports from Frédéric.
- **********************************************************************
-
- > * It seems to me that growths eventually stop growing, sometimes after a
- > single turn.
-
- JC: NOW FIXED.
-
-
- > I have noticed very recently
- > (between 2.83 and 2.84) that some growths tend to stop growing very rapidly.
- > I once cast an orange jelly and it never grew at all !
-
- JC: NOW FIXED.
-
-
- > Sometimes Hippocrates or Aesculapius randomly kills one of my creatures
- > with his healing Special Combat.
-
- JC: I finally figured this out! It happened randomly because it was caused
- by the Impurities code! Here is the offending line of code:
-
- IF (Impurities and MSGRandom() % 800 < 2 and !isExposedWizard(defence)) combat=50;
-
- I rewrote it thusly:
- IF (Impurities and MSGRandom() % 800 < 2 and !isExposedWizard(defence)) THEN
- IF (combat >=0) THEN
- combat=50;
- ELSE
- combat=-50;
- END_IF
- END_IF
-
- So the real bug was:
- * BUG: With Impurities turned on, healing special combat sometimes kills
- the creature being healed! NOW FIXED!
-
- > * When a creature raised from the dead is covered by a growth and then
- > uncovered, it is living again !
-
- This is according to the rules of Chaos. If you search the docs for
- "covered by a growth" you will see the rules pertaining to this matter.
-
- > This is not normal !
-
- Being undead is not normal!
-
- If you don't want this to happen then you _must_ kill the growth yourself
- before it dies of natural causes!
-
-
- > * When a cloaked wizard who as scavengerism is scavenging a corpse, it says
- > "Wizard 4 munches on a corpse of cloaked creature" !
-
- This was a simple matter where I switched my variables. NOW FIXED.
-
-
- > * Sometimes when a wizard is "killed" by justice/vengeance/exorcise in an
- > unexplored region and is reinstated, his position is revealed (the cell he's
- > in becomes empty for the duration of the "bonus spell" sound).
-
- This was a bug whereby DrawCell(&NothingImage,cell); was being used instead
- of the correct ReDrawCell(cell);
- DrawCell() just blindly draws graphics into cells without taking into
- account exploration mode.
- ReDrawCell() knows about exploration mode and acts accordingly.
- NOW FIXED.
-
-
- > * The wizard that wouldn't die bug:
- >
- > Wizard 5 has 1 life point and -2 recovery. Each time he's attacked, it dies
- > (allelujah sound, but no wizard dying sound). The cell is left blank but the
- > wizard is still there if I move the mouse pointer over it. It can be
- > attacked again and the same happens. The cell is eventually refreshed and
- > the wizard reappears. I think he cast Lich lord during his first life but
- > the lich lord icon is not in the list of his powerups now. He was killed at
- > least 15 times by the independents !
- >
- > Autosaves 15,16,17.
-
- Ok, this had nothing to do with Lich Lord. This was caused by the fact
- that the wizard had cast Horror on himself. Each time he was killed the
- Horror code kicked in and tried to replicate him, but there were no empty
- adjacent cells. So he wasn't actually replicated and the Horror was not
- actually used up and he didn't actually die.
-
- I have now changed it such that:
- 1) If this happens again, the Horror gets used up. So it will only happen
- once.
- 2) It now prints a text message and does a graphical effect to indicate
- that the Horror process is happening.
- 3) It sets Life, Magic Resistance, Intelligence, Manuverability and Combat
- to maximum. Move gets set to max(CurrentMove,InitialMove). This is to
- make up for the fact that it didn't get to replicate.
-
- NOW FIXED. Tested and works ok.
-
-
- > * ????!? The wizard that wouldn't die died on turn 18 ! It was during
- > boardupdate so I guess the giant rat bite did it.
-
- The wizard who wouldn't die after being attacked multiple times by green
- and golden dragons + tons of other creatures ended up dying by a simple rat
- bite.
-
-
- > * When the independents (but it may also happen for other teams, I don't
- > know) kill a wizard, the word "Independents" at the bottom of the screen is
- > erased just after the dying-wizard animation, and the movement phase
- > continues without "Independents" to be reprinted.
-
- NOW FIXED.
-
-
- > * An evil wizard cast meddle but the following creatures were not affected:
- > The exorcist, earth elemental. Is it because they have no reincarnation ?
-
- Yes.
-
- > Why wouldn't the exorcist reincarnate into a bandit or an orc ?
-
- He was set to not reincarnate into anything.
- I have now changed The Exorcist so that he reincarnates into a good little
- Halfling.
-
-
- > * A wizard destroyed a white dragon corpse with a magic bolt and the dragon
- > cried ! It's an old bug you told me was allegedly fixed :-)
-
- OOPS! I put the "and !isDead(b) and !isScroll(b)" code on 1 of the lines
- that needed it but I forgot to put it on the other line that needed it!
- doh! NOW FIXED.
-
-
- > * The game ended as I killed the last piece of independent earthquake.
- > However, there was still a bird lord alive belonging to a dead player
- > (product of impurities).
-
- With impurities, you can win the game in an impure manner 8)
-
- Creatures that belong to dead players are no threat to you whatsoever so
- there is no need to kill them.
-
- **********************************************************************
- End Bug Reports from Frédéric. (Is there ever an end? 8)
- **********************************************************************
-
- * Score Screen has now been translated into Français. I added in a teensy
- amount of code for stringwidth sensitivity so that the screen looks good in
- English and Français. I'll probably have to add more code when the game is
- translated to other languages. I only added in the bare minimum amount
- to make the Français score screen look good.
-
- * SMALL BUGS: Microscopically small even 8) The following spells would,
- in exploration mode, reveal the position of the target for a brief
- instant by drawing a blank image in the target cell.
- However, this blank image was immediately redrawn properly.
- Apparently nobody ever noticed this small flaw.
-
- It affected the following spells:
- Armour, Brain Boost, Cloak, Combat, Cursed Sword, Magic Shield,
- Meteor Storm, Recover Boost, Restoration, Sword of Sassenrath,
- Scavengerism and Exophagy. NOW FIXED.
-
- * ALL appropriate occurrences of DrawCell() have now been replaced with
- ReDrawCell() I systematically went through the entire program and did
- this. DONE.
-
- * 1st and 2nd Spell Information Panels have now been 100% translated into
- Français.
-
- * Replaced all appropriate occurrences of player_name[x] with
- PlayerName(x) in the entire program + coded the PlayerName() routine to
- handle the multilingual translation issues. This took 1 hour.
-
- * Sent Frédéric version 2.85 for testing/translating on July 19th, 2000.
-
- * Sent JKD version 2.85d for OS 3.5 + MagicMenu + P96 + CyberGraphx
- testing. He reports that Chaos works perfectly on all systems!
-
- -------------------------------------------------------------------------
- CODE REDUCTION UPGRADE
-
- There are tons of no-longer-used routines in info.c. These were originally
- used for the old 640x256 information panels. The code was still in the
- game and active so that I could switch between the old way and the new
- hires way any time I wanted. However, I never actually did that.
- And now the old code is seriously out of synch with the new way of doing
- things so I am finally eliminating it all.
-
-
- Eliminated 1252 lines of code from info.c
- Info.c 155488 -> 103018 SAVED: 52470 bytes of source code.
- Chaos 433540 -> 420040 SAVED: 13500 bytes off the release version of the
- Chaos executable.
-
- All the code that I removed has been saved in SC:UnusedInfo.c in case I
- need to reference it for some strange reason. Which I seriously doubt I
- ever will.
-
- ---------------------------------------------------------------------------
-
- * TEST lzx vs lha
- I archived a complete demo distribution of the game
- lzx: 4942881 bytes.
- lha: 5298980 bytes.
- SAVED: 356099 bytes.
-
- * Sent Xav version 2.85 for playtesting on July 20th, 2000.
-
- BEGIN: version 2.86
- * Replaced EndTurn.8svx with Frédéric's EndTurn.8svx because nobody liked
- the old end turn sound. I renamed the old EndTurn.8svx to MaxCombat.8svx
- and changed the game code to play this sound anytime anyone casts a spell
- that makes a creature have maximum combat. This means the following spells:
- Combat, Touch of God, Chaos Lord.
-
-
- -------------------------------------------------------------------------
- Translation of IP1 (Information Panel 1) Creature Statistics Screen
- to: Français.
-
- * Scavenge translates to Charognardise which is _entirely_ too long.
- So I'm leaving this in English. Someday when we make the AGA version
- this can be changed to the "Scavengerism" spell icon, which looks quite
- nice.
-
- Magic Resistance translates to Résistance magique which is too long.
- Résistance magique -> Résist. magique
-
- Ranged Combat translates to Combat à distance which is too long.
-
- > Ok, so how should the info panel look?
- >
- > Option A:
- > Combat
- > Tirer
- > Combat spécial
- >
- > Option B:
- > Combat
- > Ã distance
- > Combat spécial
- >
- > Option C:
- > Combat
- > ... Ã distance
- > Combat spécial
- >
- > Option D:
- > Combat
- > Combat de loin
- > Combat spécial
-
- Xav: Option A is the good one.
-
- JC: Option A implemented.
-
- END Translation of IP1 (Information Panel 1) Creature Statistics Screen
- to: Français.
- -------------------------------------------------------------------------
-
- * Reduced the amount of time that the horrible looking circular pattern is
- displayed on the lissa-box requester things. Reduced it to 1/3 of its old
- value.
-
- * ADDED Multingual talklists code so that now the game can use talklists of
- any supported language.
-
- * The dir structure of certain things in Chaos has now changed. The
- Screens/ dir and TalkListsDir/ have changed. So any further updates issued
- need to be COMPLETE updates, not just the executable file.
- Possibly other things in the dir structure or file structure have changed
- also.
-
- * FLAW: Touch of God and Chaos Lord do not do any sort of graphical effect!
- So you cannot tell who it is being cast on! NOW FIXED.
-
- * Improved CellEffect() with better sound file handling.
-
- * PROBLEM: The req.library filerequester is optimized for use on
- non-interleaved bitmaps. This means the scrolling sucks bigtime on the
- chaos interleaved bitmaps. It colorflashes horribly. It goes from having
- the best scrolling of any filerequester to suddenly having the worst
- scrolling of any filerequester. So I opened up yet another new screen.
- This one is just like the old HiResScreen only it is noninterleaved.
- Now the scrolling looks fast and smooth again! NOW FIXED.
-
- * LOAD/SAVE screens now have smooth scrolling once again.
-
- END of version 2.86
-
- * Copied the entire gamedir over to Chaos_2.9/ so that I may now begin work
- on the Enhanced Graphics Version on Tuesday, July 25th, 2000.
-
- * Fixed Passage description.
-
- * July 25, 2000: The size of the release executable file "chaos" is
- 421048 bytes.
-
- *************************************************************************
- * BEGIN ENHANCED GRAPHICS VERSION V 2.9 July 25, 2000 *
- *************************************************************************
-
-
- I have written a new graphics system that uses standard iff pictures to
- describe how monsters and magic spells and all other objects in the game
- look.
-
- Each object in the game has its own 320x256 64 color EHB mode iff file.
-
- The name of the file is, and must be, the exact name of the object in
- English. The spaces must be there so don't try to rename them.
- All the files are already included with the proper name in gfx/Spells/
- so you don't need to worry about this.
-
- All you have to do is edit any of the files you want and they will
- automagically get included into the game. Unless for some reason the clock
- in your Amiga is broken. In which case you may have to type in the shell:
- delete gfx/dat/#?
- That will delete the graphics index files and force the game to rebuild
- them from scratch. It takes a full minute to rebuild all the tiles from
- scratch because it must open and close 350 files + read in 350 files +
- decompress 350 files + cut and paste 731 tiles, check for blank frames,
- etc. These numbers are only accurate as of July 25th, 2000. The numbers
- will be much larger in the future.
-
- If you change any graphic file then the next time you start the game, it
- will notice that you have changed something and will rebuild the tile
- indexes. This will take a full minute or more.
-
- Selecting "New Game" from the menu is currently not sufficient to reload
- the tiles. You must completely quit the game (exit to DOS or WorkBench).
- Then reload the game and all will be well. 8)
-
- The old 3 frame animation limitation has been ERADICATED. You may now draw
- or render as many frames as you like.
-
- The old 32-color limitation has been ERADICATED. I couldn't think of any
- conceivable reason why any strategy game should be limited to 32 colors.
- All Amigas support 64 colors or more so we are going to use them.
-
-
- Ye Olde Rules for GrafixMages:
- ==============================
-
- 0. The first 31 pixels at the top of the screen are ignored.
- 1. All Living Creatures _MUST_ have a dead image! (Even if you just cut &
- paste in an image of a dead orc.) The leftmost tile is reserved for
- the dead image and only the dead image.
- 2. All Inanimate Objects and Growths and Undeads must _NOT_ have a dead
- image. Its dead image space should be blank.
- 3. You may have as many frames of animation as you like. Ping-Pong
- and continuous looping playback are both currently supported.
- 4. In order to specify that you want your animation played in looping mode
- you must change the purple line at line 32 to be color #1. This tells
- the game to play this animation in a continuous loop.
- 5. The animation frames are terminated by the first completely blank frame.
- 6. The image must use the supplied palette. If you rearrange the palette
- for artistic reasons then you _MUST_ rearrange it back to its original
- state before saving the file. Failure to do this will result in
- wrong-looking graphics.
- 7. If you want to leave extra grafix on the screen that you are working on
- then that's ok. They will be ignored. Only the tiles up to the first
- blank tile are processed by the game. Any extra gfx at the bottom of the
- screen are ignored.
-
-
- ----------------------------------------------------------------------------
-
- * BUG: When playing in exploration mode, if you try to examine an
- unexplored cell and the cell has a scroll in it then it lets you read
- the scroll! NOW FIXED.
-
- * BUG: Joseph Conwell reports that he cast Sword of Sassenrath on his Orc
- and then when it promoted to Mighty Orc it lost its Sword of Sassenrath.
- JC: This is because it promotes to whichever stat is bigger. 0 > -1 so
- it makes sense. However I have now hacked in some extra code so that
- if you posess negative special combat then it will be promoted to
- whichever stat has the greatest absolute value. NOW FIXED.
-
- 1. Write and test code to read in all the tiles from IFF files. DONE.
- 2. Load new color palette. DONE.
- 3. Rewrite ColorCycler. DONE.
- 4. Redefine all #defined colors to new values. DONE.
- 5. Rewrite ReDrawCell() to use the new multiframe-capable form. DONE.
-
- 6. Totally rewrite the animator task to handle the new tiledata + keep
- track of the multiple framecount stuff and which direction it is going
- through the animation in.
- Animator tasks needs the following variables:
- 1. WORD FrameCount so it knows what frame it is on.
- 2. WORD AnimationDirection. 1=Forwards, -1=Backwards. (for ping pong playback)
- 0=stopped.
- 3. BYTE PlayBackType 0=PingPong. 1=ContinuousLoop.
- ALL DONE.
-
- 7. Rewrite sm.c to handle new variables:
- sm.c FrameCount will ALWAYS be set to 1
- sm.c AnimationDirection will ALWAYS be set to 1.
- ALL DONE.
-
- 8. Edited Meteor Storm spell to work with new system. DONE.
- 9. Rewrite the entire game to use the new system. DONE.
-
- 10. Eliminate all old references to the old hardcoded cimage1[], cimage2[]
- and cimage3[] arrays which limited the game to 3 frames of animation.
- DONE.
-
- 11. Eliminate all old references to DeadImages[] array. DONE.
-
- 12. Added the code to support loading files with CONTINUOUSLOOPing anims.
- Just change the color of the first line to #1 and the anim will play in
- looping mode. DONE.
-
- 13. Hack in code to write out all those hardcoded cell effects gfx and
- color convert them to the new palette and store them as IFFs in the
- gfx/CellEffects/ dir. DONE.
-
- 14. Write code to read in the IFF CellEffects. DONE.
- 15. Rewrite CellEffect() to use the new IFF gfx. DONE.
- 16. Rewrite BoardEffect() to use the new IFF gfx. DONE.
- 17. Remove all hardcoded explosions and magical effects graphics. DONE.
- 18. Don't load the old graphics file "chaos.dat" anymore. DONE.
- 19. REMOVE all graphics handling from sm.c. DONE.
-
- 20. Edit all 349 spell files and remove all spell-descriptions and imagery.
- Remove all Description: info and Imagery: info and Image: info. DONE.
-
- 21. Edit sm.c to remove all code related to reading/processing/including
- image files into the compilation process. DONE.
-
- 22. Edit sm.c to remove all code related to reading/processing/including
- spell descriptions into the compliation process.
- Comment out or delete everything to do with spell descriptions.
- DONE.
-
- 23. There are several programs that are being compiled by the makefile in
- order to make the old compressed spell descriptions file "pool.ssc"
- Eliminate them. DONE.
-
- Now that I've eliminated all that stuff from the makefile
- (spell descriptions, text compression encoding & decoding routines)
- + all that stuff from the spell manager (description processing and
- image processing) a smake clean smake developer version now takes only
- 11.5 minutes on my 25 Mhz 030 (freshly booted, not on the internet)
-
- 24. Convert all the levels to the new animation system.
- A. Load each old level.
- B. Go through the entire visible board and underboard
- C. If FrameCount==0 then FrameCount=1;
- D. Stuff 1 into the AnimationDirection
- All levels have now been converted to the new animation system! DONE.
-
- 25. Edit io.c to handle loading a game that was using one set of graphics
- files into a system that is using completely different graphics files.
- Check for any currently illegal settings and adjust them. DONE.
-
- 26. Add in gfx/Spells/ and gfx/dat/ and gfx/CellEffects to MakeDemoOfChaos.txt
- DONE.
-
- 27. GRAPHICS:
- Put in Xav's new moon from setupscreen as Sanctuary. DONE.
- Put in Kreton's Wizard graphic as Wizard 1. DONE.
- Edit Generator. DONE.
- Remove blood from ShapeChanger. DONE.
- Spriggan is messed up. Fix him. DONE.
- Mess with Witches as new wizards. Leave this for Xav.
- Amphisbaena is all messed up. Leave this for Joe or Xav.
-
- 28. Edit SpellManager script file to remove everything to do with
- spell descriptions and images. DONE.
-
- 29. Add in code to load the setupscreen1 from
- gfx/Screens/English/SetupScreen1.iff DONE.
-
- 30. Rewrite the setup code to have everything on SetupScreen1 positioned
- correctly. This took some time because the name gadgets were
- overwriting the border. DONE.
-
- 31. Add in code to load the setupscreen2 from
- gfx/Screens/English/SetupScreen2.iff DONE.
-
- 32. WOOPS! I forgot to rewrite PutToSleep() to stop animating creatures
- that are asleep! There is a sleeping Pegasus that is still flapping
- its wings like crazy! NOW FIXED.
-
- 33. Rewrite Flesh to Stone and Mass Petrification to properly stop the
- newly created inanimate object from being animated. DONE.
-
- 34. Rewrite Stone to Flesh and Inanimorphobiosis to properly reactivate
- the animation on a previously-animated creature. DONE.
-
- 35. Put Xavier in the scrolling credits and the docs. DONE.
-
- 36. FLAW: The pentagrams on the "About" screen are now invisible due
- to the new color palette! NOW FIXED.
-
- 37. Add in code to load the EndTurn, Question Mark, Dismount, Load and Save
- gadgets from gfx/Gadgets/English/
-
-
-
- How to test a lzx archive:
- lzx t archive.lzx >T:test.txt
-
-
- After converting all the gfx to IFF files, the following spells looked
- horrible and I spent some time editing them.
-
-
- Abath: I antialiased him and redrew his horn so now it looks really good.
- Abduction Converted horribly so I edited it some.
- Achiyalabopa: I added texture + antialiased it.
- Acid Rain: Antialiased it. Beveled it.
- Aerial Servant: I added texture + antialiased it.
- Aesculapius: Skipped. I think Xav has already redrawn it + Aes drew one in
- 64x64 that needs to be shrunk down and used for this creature.
- Put in Xav's new "Snake" Aesculapius + drew a dead image for it.
-
- Agathion: Antialiased it.
- Air Elemental: Antialiased it.
- Alliance: Antialiased it.
- Alter Reality: I attempted to shade it with shadows. Limited success.
- Alternography: antialiased it.
- Amphisbaena: Antialiased it.
- Animate: Included Xav's stupendously wonderful looking Animate!
- Apple Wood: Added some texture. Antialiased it.
- Arborist: Antialiased it.
- Archery: Antialiased it.
- Arctic Wolf: I got rid of the hard black background + antialiased it. Then
- I changed the colors to be whitish like an Arctic Wolf should really look.
- The old wolf I saved as "Dark Wolf" for future use.
- Armour: Antialiased it. Replaced it with Xav's gray-scale Armour.
- Aviary: I hated how the old one looked so Joe and I completely remade it.
- Azer: Antialiased it.
-
-
- Included Joseph's improved Abath, Arborist, Alliance, Agathion, Azer,
- Apple Wood, Aviary. I totally redid Joe's Aviary and Apple Wood and
- Archerotomy.
-
- Included Xav's improved: Agathion, Air Elemental, Acid Rain.
-
-
-
- I made a new variation of the baboon called baboon2. I may use
- this in the future somehow.
-
- Baboon: Antialiased it.
- Banderlog: Antialiased it.
- Bandit: Antialiased it.
- Basalt Golem: Antialiased it.
-
- Basilisk: I gave the basilisk a purple eyeball + Antialiased it.
- Battle Cry: It converted badly so I fixed it. Then I anti-aliased the flag
- also.
- Bat: Antialiased it.
- Bat: I went back and totally redrew it and made a new dead body. The only
- problem now is that it is not animated :(
- Included Xav's new well-drawn and animated Bat!
-
-
- Betrayal: converted horrbily so I had to fix it. Then I added shadowing to
- it.
- Biohazard: Beveled it.
- Bipedal Generator: I always hated the way the Bipedal Generator looked so
- I anti-aliased it, recolored it and beveled it.
-
- Bird Lord: I antialiased it. Then I went back and antialiased the
- antialiasing so its SUPER smooth looking.
- Blue Dragon: Double antialised it. Its super smooth now!
- Bodak: Antialiased it.
- Boil: Antialiased it. It looks a LOT nicer now! Redid it using Xav's new
- Flood graphic.
- Bolter Wall: I made it rotate.
-
- Brain Drain and Brain Boost converted badly so I fixed them then I
- anti-aliased them. Now they look really nice! (compared to how they used
- to look)
- Brain Drain Beam converted horribly so I edited it and fixed it up and
- antialiased it.
- Bury: Antialiased it. Threw it away because it sucked. Pirated the bloody
- corpse from Xav's Scavengerism and the arrow from Xav's Animate and then
- drew some grass and a pile of dirt. It looks 10x better than the old one.
-
- Burstroem's Browser: Included Xav's book. Added more antialiasing to the
- bottom of the book.
-
- Included Joseph's new Bandit and Baboon. They are both MUCH better than the
- originals!
-
- Included Joseph's new Battle Cry and Biohazard. Battle Cry REALLY needs
- 32x32 pixels and 256 colors!
- Included Xav's Fantabulous Battle Cry!
- Included Xav's new Biohazard. I will use Joseph's Biohazard as something
- else.
- Included Joseph's new Bipedal Generator and Bodak.
- Edited Joseph's new Basalt Golem into an animation and included it.
-
-
-
-
- Camel: Double Antialiased it and made the hump bigger too.
-
- 16x16 pixels is such an absurdly low resolution that it is many times not
- possible to do proper anti-aliasing :(
-
- Cartography: Antialiased it. Included Joe's new Cartography.
- Cat Lord: Antialiased it. Included Joe's new Cat Lord.
- Centaur: Antialiased it. The tail looks much better, its fluffier.
- Chaos Lord: Antialiased. Included Joe's new Chaos Lord.
- Chronomancer: Antialiased it. Replaced it with Xav's Chronomancer from his
- setupscreen. Drew a dead body for it.
- Clay Golem: Made a dead body for it.
- Cloak: antialiased it. Included Joe's new cloak. It could be better.
- Combat: Included Joe's new Combat.
- Combat Drain Beam: Included Joe's new Combat Drain Beam.
- Command: Didn't translate so well so I fixed it. Later on I replaced it
- with Xav's fantastic new version!
- Confidence: I included Joe's new Confidence.
- Convert: Changed the "M" to a "C" and antialised the whole thing.
- Crimson Death: Antialiased it.
- Crocodile: Antialiased it. Included Joe's slightly improved Crocodile with
- texture on his back + it now has feet.
- Cursed Sword: Antialiased it and made the hilt a bit smaller.
-
-
- Dalek: Antialiased it. Included Joe's improved version + double antialiased
- it.
- Dao: Antialiased it.
- Dark Citadel: Antialiased it.
- Dark Wood: Antialiased it. Replaced it with Xav's new bleeding version.
- Dead Revenge: Antialiased it. Included Joe's improved version.
- Demon: Antialiased it.
- Depth: It was already partly antialiased! Oh well, I antialised it all the
- way and now it looks sort of fuzzy but there is NO blockiness at all.
- Derro: Antialiased it.
- Destroy Wall: The converted version looks BETTER than the original! No
- changes made.
- Dire Wolf: Antialiased it. It really looks better.
- Discard: Antialiased it.
- Disection: Antialiased it.
- Disrupt: Antialiased it.
- Dragon Nest: Antialised it but it didn't work out very well. :(
- Drain: Antialiased it.
- Dread Elf: Antialiased it.
- Drelb: Antialiased it.
- Dual Earthbind: Antialiased it.
-
- Eagle: Antialiased it.
- Earth Elemental: Included Joseph's new version.
- Eidetic Xenogenicide: Joseph totally redesigned it. It looks much better.
- Elephant: Antialised it.
-
-
- Sent Xavier Elf Boots + Harpy because I don't know how to make these look
- better.
-
-
- Elm: I 100% Antialiased it.
- Emerald Dragon: I 100% antialiased it. It looks really nice now.
- Encumberance Beam: I included Joseph's new version.
-
- Exorcise: I simply replaced the old Exorcise graphic which wasn't so bad
- with a new one designed by Aes which is TOTALLY AWESOME! It has great
- shading in it!!! Oops its 2 pixels to tall and 2 pixels too wide!
- NOW FIXED!
-
-
-
- Falcon: Antialiased it.
- Faun: Antialiased it.
- Fir: Antialiased it.
- Fire: Antialiased it.
- Fire Bat: Antialiased it.
- Joseph made a new "Bat Out of Hell" graphic (It might not be 100% finished
- yet)
- Fire Demon: I antialiased it and made the color texture a bit better.
- Fire Elemental: I antialiased it and changed some pixels around to add some
- extra color.
- Fire Shield: Antialiased it a tiny bit.
- Fireball: Antialised it. Replaced all green with Purple. Replaced all
- Gray with Orange. Splattered some more orange around in the red.
- Flesh to Stone: Antialiased it. Replaced all Green with light gray. The
- rock had many transparent black holes in it! I Replaced some of these
- with dark gray and others with hard black (nontransparent). I also added
- some shading to the "+" which looks very nice.
- Floating Eye: Antialiased it and cleaned it up some. It looks better now.
- Flood: Antialiased it and threw some extra colors arond randomly in 1 of
- the frames.
- Flood Shield: Antialiased it and then added beveled edges and more color.
- Fly: Antialiased it.
- Free All: Antialiased it. Changed the color of the 2nd key to be
- compatible with antialiasing.
-
- Generator: Antialiased it.
- Ghast: Double Antialiased it.
- Ghost: Double Antialiased it + added sparkle to the white and blue dots.
- Ghoul: Antialiased it and added sparkle to the dots.
- Giant Beetle: Antialiased it. Used a beetle clipart as a template to
- redraw it. NOW IT LOOKS AWESOME!
- Giant Rat: I antialiased it and it now looks WAY THE HELL better!!!
- Giant Spider: Antialiased it but the colors were so dark to start with that
- you can't really see any difference.
- Goblin + Goblin Bomb: Antialiased.
- Golden Dragon: Antialiased. It looks much better now. This creature
- already had halfway good shading to it.
- Gooey Blob: I single antialiased it and it looked good. But there are so
- many shades of the same green in the palette I decided to go ahead and
- double antialias it. It now looks very fuzzy. I'm not sure if this is
- better than single antialiasing or not. It does look smoother and less
- pixelated but its very fuzzy. Its probably better to have it look fuzzy
- so I'm leaving it like this.
- Gorilla: Antialiased it.
- Gravity Sphere: It looks horrible and I didn't bother trying to fix it in
- any way.
- Gray Elf: Antialiased it.
- Green Dragon: I antialiased it. Then I tried adding some shadowing and
- texture and it came out quite nice! Its nowhere near Xav-Quality but its a
- lot better than it was originally.
- Green Oozey Crap: I screwed around with it and stuff... It looks better
- than it did.
- Grizzly Bear: AntiAliased it and added some shading to the dead image.
- Gryphon: Antialiased it.
-
-
- Halfling: Antialiased him. Made his dead image be decapitated with his own
- sword.
- Harpy: I antialiased it. Ack! Its drawn on a hard foreground black!
- NOW FIXED. A few days later I went back and partly double
- antialiased it and added some simple shading to it.
- Haste: Antialiased it. I tried to add a drop shadow to the + but it looked
- terrible.
- Haunt: I antialiased him then I animated him! This is my first attempt at
- animation.
- Hidden Horror: This is supposed to look identical to a halfling so I just
- copied the Halfling as this.
- Higher Devil: I only made extremely minor touchups on this.
- Hippocrates: Antialiased him. Moved him to the edge to make room for my
- new improvements. Added a Caduceus and a Red Cross so that it is
- obvious that he heals. Removed the Dead Orc Image and made him a
- real Dead Image.
- Horror: Antialiased it and added some simplistic shading.
- Horse: Antialiased it.
- Hybsil: Antialiased it.
- Hydra: Antialiased it. Added shading.
- Hyperclone: Made simple modifications.
-
-
- Ice Breath: Tried to antialias it some.
- Imp: Antialiased it and added some nice shading! Redrew the Dead Image.
-
-
- Inanimage and Inanimatologist look identical to a Wizard 1!
- I propose:
- Xav's Wizard 1 becomes Inanimage.
- Xav's Wizard 1 minus the wand becomes Inanimatologist.
- There will be a completely new wizard for Wizard 1. (I'll decide which
- graphic later on)
-
- This means the old Inanimage/Inanimatologist/Wizard 1 will be used for
- absolutely nothing! But I can assign him to be something later.
- I can also draw sparkles around the end of the wand.
-
- Inanimorphobiosis: I couldn't really do anything to this because it just
- plain needs a much better rock.
-
- Invert: I messed around with it some... Didn't really improve it.
-
-
- Jaguar: Antialiased it.
- Jann: Antialiased it. The dead image was the same as the Dead Orc so I
- redrew it.
- Joker: I added shading to it and made it look 8x better than before!!
- Juju Zombie: Antialiased it.
- Justice: Change the shading on part of his face.
-
- Kill: Added Beveling with only limited success.
- King Cobra: Antialiased it and added a bit of shading.
-
-
- Leopard: Antialiased it and changed the green spots into golden spots.
- Lesser Devil: Antialiased it.
- Level: Beveled it and shadowed it.
- Lich: Antialiased it and gave it yellow eyes.
- Lich Lord: Antialiased it and gave it yellow eyes and modified the crown.
- Lightning: Beveled it.
-
- Magic Bow: Antialiased it and made the curve of the bow extremely smooth.
- Magic Castle: The original was so so hopeless looking that I didn't bother
- trying to smooth it out. I just replaced it with Xav's "Dark Castle".
- The Dark Castle has a flaw: The Door and windows are made of the
- transparent black instead of the hard foreground black. NOW FIXED.
- Magic Knife: I replaced the old one with Xav's new one.
- Magic Shield: I simply replaced the old one with the one that Aes drew for
- me many months ago. However this shield looked like a normal shield. But
- this shield ONLY increases your magic resistance so I added some
- color-cycling to it so that people would remember that it is a _magic_
- shield not a real shield.
- Magic Sword: I replaced the old one with Xav's new one.
- Magic Wand: I never liked the old one so I drew a completely new one.
- Magic Wood: I completely redrew the trunk so its 10x better. I haven't
- decided what to do about the treetop though? Should it be a normal treetop
- but with some color cycling added to indicate its a magic tree? Or what?
- Manticore: I antialiased it then I drew a shadow under the wing. The
- shadow looks nice.
- Marid: Antialiased it and added the stripe to the dead image.
- Mass Morph: I just took Xav's Animate spell and switched it around.
- Memory Master: Antialiased him and made a completely new dead body with
- blood splats and decapitated head.
- Memory Mage: (Originally looked identical to Memory Master). I took my new
- Memory Master graphic and gave him a Magic Wand + shaded his costume
- according to the light shining on him from the magic wand.
- Mind Flayer: Antialiased it. Added a bit of shading.
- Mount: Antialiased it. Added a bit of shading.
- Move it: Antialiased it, beveled it and made the whole the green for "go"
- Mud Man: Antialiased it. Totally redid the color + added a bit of shading.
- Totally redid the dead image.
-
- Neo-Otyugh: Antialiased it and darkened the back leg.
- Nightmare: Antialiased it and darkened the back legs.
- No Grow: Antialiased it and added texture.
- No Mount: Antialiased it and made the tail better.
- Nuke: Redrew it. Antialiased it.
-
- Ogre: Antialiased it, shaded it, made the arm have a shadow, improved the
- head.
- Ogre Mage: The Ogre Mage looked identical to the Ogre so I just kept it
- that way for now.
-
- Ogre Warrior: The original Ogre Warrior was just a mirror image of the Ogre
- so that is how I did the new one. I just mirrored the Ogre and saved it.
- This means the shadowing is actually backwards. But oh well... we can
- worry about that later. Maybe it will be funny to have a backwards shadow
- on him?
-
- Ogre Assasin: He's just like the Ogre Warrior but with a differnet
- animation sequence. He has the backwards shadow as above.
-
- Oracle: Designed by Xav. I brightened the crystal ball a bit and made it
- look like the Oracle's fingers were touching the crystal ball.
- For the dead image I drew a crystal ball laying on the ground + pirated
- the dead image from Scavengerism.
-
- Orange Jelly: Antialiased it. This graphic needs professional attention.
-
- Orc: Antialiased it. Changed his face.
- Orcs: same as Orc.
-
-
- Paradigm Shift: Antialiased it.
- Passage: Antialiased it. Beveled it.
- Pegasus: Antialiased it.
- Pit: Recolored it and antialiased it.
-
-
- Probably use a Xav graphic for Plasma Beam.
- Platinum Dragon: Antialiased it. Double Antialiased parts of it to make it
- really smooth.
- Points: Antialiased it. Beveled it.
- Poison Dagger: Antialiased it. Drew blood on it. Drew blood dripping from
- it. It now looks really cool.
- Pool: Antialiased it.
- Power Wall: Antialiased it.
- Pox Shield: Antialased it.
- Protection: NEEDS TO BE REDRAWN!
- Pseudodragon: Antialiased it. Added a bit of shadow under the wing.
- Double antialiased parts.
- Pyrohydra: Its identical to the Hydra.
- Pyrotechnics: Antialiased it. Beveled it.
- Python: Antialiased it.
-
- Quench: Antialiased it + smoothed the fire a bit.
- QuickShot: Antialiased it and beveled it and changed the color to use the
- color cycling color and some brown.
-
-
- Radioactive Land: It was just a bunch of green dots, it could have been
- grass! I changed the green dots to purple dots so now it really looks
- radioactive.
- Raise Dead: Pirated some of Xav's gfx and rearranged them and edited them
- into a nice Raise Dead graphic.
- Range Boost: Antialiased it and beveled it.
- Red Dragon: Double antialiased him.
- Reflector: The colors did not convert well so I recolored it and
- double-beveled it.
- Replicate: I tried to antialias it but it came out looking HORRIBLE so I
- left it alone.
- Repulsion: Double beveled it and added many more shades of color.
- Roper: Antialiased it + shaded it.
-
-
- Separation: Took the alliance spell and drew a big X over it.
- Shadow Dragon: Antialiased the arms. Put a 3,1,0 brown dot at the end of
- the tail and foot.
- ShapeChanger: Joseph should do some kewl morphing with this!!
- Skeleton: Antialiased it.
- Slow: Beveled it.
- Solar: Antialiased it.
- Spectator: Made it perfectly round. Antialiased it. I could easily make
- an awesome animation out of this one! *****************
- Spectre: Antialiased it.
- Speed: Beveled it.
- Spriggan: Antialiased it.
- Still: Antialiased it.
- Stone Giant: Antialiasd it.
- Stone Golem: Made a better dead body.
- Stone to Flesh: Pirated some Xav gfx to make this one.
- Strong Wall: Darkened it.
- Subversion: Beveled it.
- Summons: Beveled it.
- Swap: Changed the colors a bit + beveled it.
-
-
- T-Rex: Antialiased him. Double antialiased his back.
- Teleport: Remade it using Xav's little man graphic.
- Tempest: Antialiased it.
- The Exorcist: I went crazy and totally redrew him with magical crosses that
- are animated with magical glowing + he turns his head. I also made a dead
- image of him in a pool of blood with his cross stuck threw his body!
- Its totally cool! His legs could be better though, but I don't know how?
- Thundermare: Simple antialiased him + added blood on the dead body.
- Torment: Beveled it.
- Troll: Simple antialiasing + some blood.
-
-
- Ubiquiscope: Beveled it.
- Unicorn: simple antialiasing. Changed the horn to white.
-
-
- Vampire: Antialiased it. Shaded it.
- Vodka: Find Kreton's Vodka!!!!
- Volcano: Antialiased it a bit.
- Vortex: Antialiased it a bit.
- Vulture: Antialiased it. Shaded it some. Does this look ok?
-
- Wasp Nest: Antialiased it. The curves are ultra smooth now.
- White Dragon: Antialiased it. Added shadowing under the wings.
- Wight: Antialiased it.
- Wolverine: Antialiased it. Tried to put some blood on the dead body.
- Wood Elf: antialiased it. Joseph improved it some. Then I drew an arrow
- stuck in his head for the dead body. hehe.
- Wraith: Antialiased it.
-
-
- X-Ray: Beveled it. Replaced the whole thing with Joseph's new color
- cycling X-ray.
- Zombie: Antialiased it. Tried to shade it some.
-
-
- All spells A-Z are done!!!!! (EXCEPT FOR W!!!)
- All W is done except for Wizards!
-
- Went through Joe's L-Z.
-
- Added in Joseph's new:
- spectator, spriggan, speed, storm, sleep, skeleton, Hyperclone, Shocker.
- Shape Changer, Shadow, Magic Attack, Lich Lord, Leopard
-
- Put in Joseph's new: Joker, Justice (goatee), Iridium Horse (back leg),
- King Cobra (hood, now brown), Imp (more frames of animation), Hippocrates
- (now has a 2 pixel hat), Free All (now has 3 keys instead of only 2),
- Dark Power (multi-shaded green), Aerial Servant (many frames of animation
- + different colors)
-
-
- Eye for an Eye: Needs to be totally redone! Animate Sux! Exophagy doesn't
- even have a graphic!
-
- Sent Eye for an Eye, Animate, Exophagy to Xav along with spell
- descriptions: They came back looking unbelievably awesome!!!!!
-
- I removed the green from the side of the Tree in Animate.
-
- Xav's Telescope: I lightened the moon.
-
- Included Xav's Magic Bolt, Magic Glass, Mana Battery.
-
- Included Xav's amazingly great new: Shadow Wood, Dark Wood, Fir Tree,
- Magic Wood, Apple Wood.
-
- Included Xav's amazingly great new: Violet Fungi, Gooey Blob, Green Ooze,
- Orange Jelly, Fire, Flood, Earthquake.
-
-
- ---------------------------------------------------------------------
-
- * August 2, 2000: The size of the release executable file "chaos" is
- 325816 bytes. On July 25 it was 421048. SAVED 95232 bytes!
-
- * Sent v2.9 to Xav on August 2, 2000 so he can design gfx for it over his
- 2 weeks vacation.
-
- * Put in Xav's fixed Wizard 2, Wizard 3 and Fly. We still need 4 female
- wizards.
-
- * Xav says to change the French spell desccription of Dark Citadel from
- Citadèle to Citadelle. DONE.
-
- * August 5, 2000: TileCount=824. There are 824 tiles in the game.
-
- * BUG: Mana Battery Scrolls give bonus spells just like a real Mana
- Battery. NOW FIXED.
-
- * BUG: 1 occurrence of "Brain Dead" was not using translated strings thus
- it was always appearing in English.
-
- * Sprained my brain. No work done for 10 days.
-
- * August 15, 2000: Replaced all occurrences of "Run JCsound >NIL:" with
- "Run <>NIL: JCsound <>NIL:"
-
- ********************************************************************
- Xav Returns from Vacation! Lots of new Tiles!
- ********************************************************************
-
- Included Xav's new gfx:
- Ball Lightning, Basalt Golem, Bless, Charm, Clay Golem, Coercion,
- Cure, Dalek, Dao, Dark Wood, Death Bringer, Demonic Touch, Depth,
- Destroy Wall, Discard, Double, Elephant, Fireball, Freeze,
- Haste, Horse, Hyperclone, Irvine's Invulnerability, Justice,
- Lightning, Lion, Magic Bow, Meteor Storm, Moveit, Mullac de Irvine,
- Protection, Pyotechnics, Quickshot (quickshot is hard to read but I went
- ahead and included it anyway).
- Radioactive Land, Recover Boost, Reflector, Replicate, Request, Reveal,
-
- Restoration (I didn't like the one with the dithered heart, it needs more
- shades of color or higher resolution so I used the nondithered version.)
-
- Seismology, Shocker, Simulacrum, Sleep, Solar, Standard Wall, Stone Giant,
- Stone Golem, Storm, Strong Wall, Touch of God, Triple,
-
- Turns (I redid the 0).
-
- Uncertainty, Unicorn, Vodka, Volcano, Wake, Weak Wall, Wight,
- Wizard 1, Wizard 1, Wizard 6, Wizard 7, Wizard 8, Wizard Wings, Wraith,
- Zombie.
-
-
- The following gfx were identical to the gfx already in my version of
- the game: Fly, Wizard 2, Wizard 3.
-
- ********************************************************************
- END: Xav Returns from Vacation! Lots of new Tiles!
- ********************************************************************
-
- August 18, 2000:
-
- * Included Frédéric's new Français Spell Descriptions: Water Elemental,
- Sluggishness Beam and Combat Drain Beam.
-
- Frédéric bug report:
- * Something strange happened when I cast consecrate on a higher devil sitting
- on the bottom border of the screen: the devil himself was not killed, of
- course, but the spell did extra sound effects, as if there had been creatures
- below. And I heard an allelujah sound, and at the end of the turn the bonus
- window opened. No victim, no "Other", but I had the choice of 1 spell among
- 31 !!!
-
- The trouble was that the Drainer() function had NO error checking! Ack!
- all these years its been affecting cells that don't exist! NOW FIXED.
-
-
- * Sent all English and Français spell descriptions to Red|Blue in Quebec for
- proofreading. He liked the game "Romance of the 3 Kingdoms" and "Bandit
- Kings of Ancient China" so I figure he'll like Chaos.
-
-
- >>> * Due to impurities, a generator went asleep but continued to generate
- >>> sleeping creatures. It's kind of strange don't you think ? Impurities
- >>> shouldn't put generators to sleep ! They should only change their
- >>> allegeance to a wizard or the independents (the sleeping creatures
- >>> generated are often destroyed as soon as they are generated :-) )
- >> This sounds sooooooooooo hilarious!!!! I don't know how you find all
- >> this weird stuff out!!!! hehehehhahahahahahah 8)
- >> It sounds so funny I'm not going to change it. I've never seen it
- >> happen before! And if it does happen it must be very rare.
- >
-
- >> I probably should fix it so that it doesn't change to dead wizards...
- >> either that or let creatures move, even if they belong to a dead
- >> wizard.
- >
- > That would be a good enhancement. And change the dead revenge so that dead
- > players keep control of the generated creatures.
-
- * NEW FEATURE: I have now adjusted the code, such that if a creature exists
- who belongs to a dead wizard, the creature will still be moved as usual.
-
- * DEAD REVENGE IMPROVED: I have now adjusted the code such that a wizard
- who is killed while posessing the Dead Revenge powerup will not lose ANY of
- his generators! The wizard will die, but his generators will live on!
- And any creatures produced by the generators will be controllable by the
- player! I forsee this as being strategically important primarily in
- multiplayer games where a certain wizard may be killed first, but can still
- have some influence in the game due to his generated creatures.
- For years I haven't even bothered casting Dead Revenge because it just
- didn't really seem to benefit me; there were always better spells to cast.
- Now however, I will always try to cast Dead Revenge!
-
- * EDITED Dead Revenge spell description.
-
-
-
- On 18-Aug-00, Frédéric Delacroix wrote:
-
- > I have found a strange bug in the game related to the chaos lord and fire.
- > It could be the fire shield (and possibly other shields) that's not working.
- > Here are my notes.
-
- > * BUG ! My wizard (an undead chaos lord, by the way, with shocker) was
- > covered by its own fire breathed by one of my 3 platinum dragons, but it did
- > not die !!! I destroyed the fire with another platinum dragon breath, and I
- > could see a very very strange animation, alternating: my wizard (wizard 1),
- > a grey elf (previouly dead) and the dead grey elf. I guess this is because
- > the fire had 3 animation frames... ? When I query the stats, everything is
- > back to normal chaos lord stats, except for life force who's back to 19.
- >
- > * No wait ! There's another big strange difference ! It's Wizard 1 belonging
- > to nobody ! And it moved and attacked (but only shot once instead of three)
- > with the independents ! He killed my cats ! What a strange creature ! I kept
- > the autosave (083)
-
- > * Actually it moves between me and my cats (I have the cat lord), not with
- > the independents.
-
- JC: ok, I have investigated this and it all comes down to this:
- * BUG: Fire Shield and Flood Shield DO NOT WORK! Ack! All these years
- Fire Shield and Flood Shield have not been working! NOW FIXED.
-
- Included Frédéric's new English and Français spell descriptions for
- Power Walls and Webs.
-
- --------------------------------------------------------------------------
- New tiles from Xav:
- Copied XMAN.IFF to UnusedGfx/Xman2.iff
- Copied QUERY.IFF to UnusedGfx/
-
- Included the new Camel, Fire Bat, Mnemicide, Nuke, Singular Earthbind and
- Zombie gfx.
-
- Ogre: I haven't decided what to do about the Ogre yet. Maybe I'll use
- him as the Ogre Warrior? He looks good, but he's not animated + I
- really REALLY like the shadow on the current Ogre. I'll probably
- make him the new Ogre Warrior.
-
- Orc: The orc looks great! But the problem is that an orc is very wimpy in
- this game and he should not be so big. He should be small and wimpy
- looking. He can look good, so long as he is smaller to reflect his
- weakness compared to other creatures.
-
- Do you think you could make a small creature to be the orc?
- -------------------------------------------------------------------------
-
-
- I went through Joseph's new gfx.
-
- Included Joseph's new Mutate, Platinum Dragon, Pool, Recognomancer, Roper,
- Tempest, Wizard 3 (just changed the black eyes to brown), Wizard 8.
-
- The new Halfling looks good, but his helmet makes him look bigger. We
- really need the Halfling and Imp and Orc to be small creatures.
-
-
- * FLAW: When a Tempest kills something, it doesn't make the dying noise and
- it doesn't print any text message either. It just sort of disappears.
- NOW FIXED.
-
- On 22-Aug-00, Frédéric Delacroix wrote: ---------
- > * Garbage appears in the french translation when I have reveal in my spell
- > list and the mouse pointer is over it. I get something like
- > "RévélerÃœF\«JÂI@". I looked at the "Reveal" description file but it seems ok
- > to me... ? This only happens with this spell.
-
- JC: It is the very last spell. The very last spell wasn't being
- NULL-terminated. NOW FIXED.
-
- > * When a creature has a negative combat statistic, it can heal other
- > creatures. But the "m" key does not show it can move over friendly creatures
- > to heal them.
-
- NOW FIXED.
- -------------------------------------------------------------------------
-
- * BUG: If you shoot and kill your own wizard, when you end your turn,
- sometimes various random enforcer hits happen and always various random
- bits of memory get corrupted. This was caused by MoveWizard() being
- performed on a dead wizard so it thinks the wiz is in cell -1 which
- causes many illegal mem accesses. NOW FIXED.
-
- August 28th, 2000: The electricity was out from around 2:00 a.m. to about
- 7:40 a.m. There was no light! I couldn't see anything! It was like
- living in the dark ages! I couldn't get on the internet! And I couldn't
- play Chaos! I almost died!
-
- * Included Xav's new Singular Earthbind, Dual Earthbind, Dragon Nest and
- Goblin / Goblin Bomb graphics.
-
-
- * BUG: The archery effect randomly locks up the entire computer (sometimes).
- Using logfile code I was able to narrow it down to the following piece of
- code:
- DO_WHILE (px != tx)
- register double y = (double)(mx - px);
- AUDIONote (i--);
- MaskWritePixel (rastPort, px, (WORD)py - h + (WORD)(d * y * y));
- px += e;
- py += dy;
- LOOP
-
- I was unable to narrow it down any further. I inserted more logfile code
- to prove for a fact exactly which line was causing the machine lockup but
- then the bug refused to happen.
-
- AUDIONote() and MaskWritePixel() are used countless times throughout the
- game and have proven themselves to be 100% reliable. So what could the
- problem be? What is different about this use of those routines and any
- other? ANSWER: The animator task is STILL RUNNING during the archery
- effect! During all other effects there is an ObtainSemaphore(&BoardLock);
- which prevents the animator task from running! The archery effect would
- actually look better if it had an Obtain/Release Semaphore pair in it.
-
- Ok, but the main program and the animator don't share any variables that
- are changed anywhere EXCEPT for 1 thing: The animator task contains the
- following code:
-
- AnimatorrastPortLayer=rastPort->Layer; // Disable clipping while we have a lock on the board.
- rastPort->Layer=0; // No OS clipping = more SPEED.
-
- MaskWritePixel(rastPort,x,y) is using rastPort just like the animator is
- using. This is as it should be.
-
- So I theorize that sometimes task switching kicks in right in the middle
- of a OS WritePixel() call such that WritePixel() starts out using rastPort
- with a layer and ends up using a rastPort without a layer (or vice versa).
- And this somehow makes the OS go insane and crash.
-
- So how should I fix this?
- A) Add an ObtainSemaphore() ReleaseSemaphore() pair to the archery code?
- B) Comment out that layers disabling code in the animator task?
-
- I am choosing option B for the following reasons:
- 1. I don't ever want this bug to happen again! Someday someone might code
- a new routine that does writes or reads from rastPort without getting a
- lock on &Board first! Then the bug will be back!
- 2. I don't have time to fiddle around chasing silly bugs like this so we'll
- just have to settle for an animator task that is now 10% to 15% slower.
- 3. Now that I've implemented the fix, THAT MYSTERIOUS BLUE LINE THAT KEPT
- RANDOMLY APPEARING ON THE LEFT HAND SIDE OF THE BOARD IS GONE FOREVER!
- NOW FIXED!
-
- * BUG: Strange blue line randomly appears on the left side of the board.
- NOW FIXED (see above).
-
- * PROBLEM: Using default settings the music is playing during the bonus
- spell selection panel. This causes JCsound to fail. This doesn't hurt
- anything but it is disconcerting to the user to see messages in the cli
- window that say "ChaosDigitalSoundSubProcess failed returncode 150"
- so I have now changed the bonus spell panel to not attempt to play any
- sound effects if the music is playing. NOW FIXED.
-
- * Included Xav's Abduction graphic (the one with the flying saucer). The
- only trouble is that the Abduction spell doesn't really abduct anyone.
- Abduction should really be renamed as BrainWashing or something.
- "Abduction" should be the same as Vanish but I can't think up a way to
- make it be different from Vanish. (?)
-
-
- September 3, 2000:
- * Included Joseph's new Eagle (2 extra frames), Skeleton (Added a few new
- frames), Dragon Nest (He thought it looked to much like a friendly little
- fireplace so he made it round. It is now an interdimensional "portal"),
- Pegasus (1 extra frame), Crocodile (fixed the feet).
-
- * FLAW: A Range Boosted or Aesculapiused Goblin loses some ability when
- killing an Archer and picking up the bow. NOW FIXED.
-
- September 11th, 2000:
- * Included Xav's new Français setup screen I and II into the game.
-
- * Sent v2.9d + A500 + Trumpcard 500 with 200 meg HD and 4 megs ram to
- Vivian in exchange for a SCSI CD-ROM drive and 2 Amiga Active Magazines.
-
- * FLAW: If a person doesn't have narrator.device installed then the game
- won't play. I have now removed all narrator.device dependencies so this
- is NOW FIXED.
-
- * ADDED a new code module prefs.c to Load and Save user preferences in
- a plain ASCII file. I just hacked and slashed sm.c into prefs.c. This
- ended up still being a lot of work. Over 1200 lines of code.
-
- September 14th, 2000:
- * New menu option: "Save Prefs"
-
- * Changed Français info panel Tirer -> Tir.
-
- Frédéric writes:
- * "If you want to read about a spell, point at it and press "q" for Query."
- I let it as is, but there's something you should be aware of: in the french
- keymap, I must press "a" instead of "q" to get info. But this can change also
- for other french-speaking countries. What you should do is use the
- keymap.library (in ROM) to revert the wanted character into a wanted
- keypress, so that the letter can be correct in all keymap configurations.
-
- JC: Ok I did this and tested it and it works. NOW FIXED.
-
-
- * PROBLEM: Now that we have improved pearl.font for Chaos there can be a
- problem. If a person already has the old pearl.font installed and is
- using it in his workbench or CED or whatever, then it will already be
- loaded. Thus when Chaos attempts to load "pearl.font" it will load
- their old unimproved version since it is already in memory.
- Therefore I have now renamed pearl.font -> ChaosPearl.font and
- ran fixfonts on it. NOW FIXED.
-
- * Made documentation directories. Copied the quickstarts into them.
-
- * Added #?.prefs and Documention/ all to MakeDemoOfChaos.txt
-
- * BUG: Justice randomly does the following:
- A: Doesn't work.
- B: Works
- C: Works but then awards a bonus spell on a creature that isn't supposed
- to give a bonus spell.
-
- IF (cell<0 or cell>=GAMESPACE) return
- cellp=&board[cell];
- cMR = cellp->char_stat.MR - MD;
-
- The above code sequence looks innocent enough. But in fact is the work
- of EVIL.
-
- It was causing all the random errors of Justice, Dark Power, Vengeance,
- Exorcise etc. There is a ; missing from the end of the first line
- therefore the 2nd line was never being executed. NOW FIXED.
-
-
- ************************************************************************
- IFF Gadgets
- ************************************************************************
-
- The IFF gadget loading code:
- Each gadget will be an IFF brush. I must load each of these brushes into
- an image struct.
-
- 1. Open the IFF-file.
- 2. Determine its x and y size.
- 3. Allocate the memory for that
- 4. Read it in and set up the struct Image for it.
- 5. Poke these values into the gadget struct.
-
- IMAGES:
- 1. X
- 2. Check
- 3. Start
- 4. Quit
- 5. QuestionMark
- 6. EndTurn
- 7. RightHandSide (The texture of the right hand side of the board)
-
- The right hand side thing is not really a gadget. Its just a brush. All
- gadgets are brushes but not all brushes are gadgets.
-
- GadgetImage[0] will be unused.
- GadgetImage[1] to [7] will be used.
-
- GadgetData[0] will be unused
- GadgetData[1] to [8] will be pointers to the image data.
-
- The data areas will each be a different size for each gadget.
- So how do I handle the memory allocation and deallocation for all these
- differently sized images?
-
- A: Use AllocRemeber() (Might cause some extra memory fragmentation)
- B: Use AllocPool() (I heard this was bugged on OS 3.0 but there is no
- mention of any bugs in the OS 3.1 DevCD.)
- C: Have another array of ints for the size of the data GadgetDataSize[0] to [7]
-
- * I choose option C. It seems easy enough.
-
-
- Sept. 17th, 2000:
- I have the gadgets in but the end turn gadget and question mark gadget have
- a big black box around them. There is no way to specify that color #0 (or
- any other color) should be transparent. This makes the right hand side
- look awful.
-
- Possible Solutions:
- A: Write a special rendering hook function for my gadgets to draw them with
- the blitter in such a way as not to destroy the background. I don't
- really know how to do this though.
- B: Switch to using GadTools.library (I assume that gadtools gadgets can be
- specified as having a transparent color 0) I don't know anything about
- gadtools though.
- C. Simply redo the gadgets such that they have the backdrop built into
- themselves. This is the easiest thing to do. This also means that if
- someone redraws the right hand side then they must also redraw the
- EndTurn, QuestionMark and Mount gadgets to fit.
-
- I will do C since I don't have to read any documentation or figure out
- any paremeters or anything.
-
- * Included Xav's new French versions of the Start and Quit gadgets.
-
- * The game is now 99% playable in French. Everything except the menus and
- docs has been translated.
-
- * Added in those 2 gadgets for the hires screen.
-
- * REMOVED the old hardcoded TickImage and CrossImage from Init.c/Init.h
-
- ************************************************************************
- End IFF Gadgets
- ************************************************************************
-
- * I antialiased Xav's new rotating Generator and included it into the game.
-
- * Version 3.0 completed on September 20th, 2000. It contains 904 tiles.
- Size of 3.0d executable is 339564 bytes.
- 3.0d consumes 10.3 megs of hard drive space.
-
- * UPLOADED v3.0d to Aminet on Thursday, September 21st, 2000. My internet
- account has only been giving me around 300 cps lately, but I got 1100 cps
- while uploading chaos! It's a miracle!!!
-
-
- September 24th, 2000: Frédéric writes:
- > * I cast "stone to flesh" on one of my dark wood trees and moved it next to
- > an independent ghast. However, it did not get engaged to the ghast and I
- > could not attack it on the same turn.
-
- I could not exactly duplicate this bug. When I moved my Dark Wood next
- to any enemy it got engaged, however when I clicked on the enemy to attack
- it, no sound was made and the graphical attack effect was not shown.
- The attack actually did happen though. The enemy lost the appropriate
- 2 hit points.
-
- This was caused by code that suppressed the attack sounds & gfx for the Dark
- Wood (so as not to get boring and annoying when its SpecialCombat attacks 8
- adjacent enemies). I tweaked the code to only suppress the combat sound
- and graphical effect when the Dark Wood is inanimate. NOW FIXED.
-
-
- * INTEGRATED Frédéric's improved asm music routines into the game. The
- music system now resides in the dir AsmMusicSystem/
- I didn't know what to do with the file proplayer.a so I just left
- it out. Everything seems to work ok but the subsong bug is still there.
- I did a simple memory leak test and a simple mungwall hit test.
- Everything seems ok. We can now allegedly play MMD2 songs from Octamed
- Sound Studio Professional from 1 to 64 channels.
-
- * FLAW: When you select a spell from your list, the erased area is 1 pixel
- to big. NOW FIXED.
-
- * ADDED part of the code to support PlayByEmail.
-
- -----------------------------------------------------------------------
- Problems caused by a bug in RestoreCellWizard() (It wasn't doing a BackUp()
- it was just overwriting whatever was there)
-
- * When the mount of a wizard is killed, it leaves no corpse behind.
- Tested and works perfectly. NOW FIXED.
-
- * When a wizard dismounts something onto a scroll, the scroll is destroyed.
- NOW FIXED.
-
- * Above fix causes collapsing meditations to reappear once the wizard moves
- off of them. NOW FIXED.
- -------------------------------------------------------------------------
-
- Frédéric bug reports for v3.0 +++++++++++++++++++++++++++++++++++++++++++
- > * I had saved the preferences with Music off, but when I restarted the game,
- > the music was switched back on. However, the menu "Music" was unchecked.
- > When I selected it, another module was restarted, then I could switch the
- > music off by reselecting the item. Seems you forgot to read this preference
- > item before starting the music.
-
- NOW FIXED.
-
- > * The left amiga key acts as "q". Actually, I guess every keypress of a
- > qualifier triggers the very last action done on the keyboard.
-
- This was caused by the fact that MapRawKey() maps qualifier keys as
- nothing. That is it doesn't even put a 0 into the buffer. So the buffer
- was left holding whatever key was pressed last. NOW FIXED.
-
- END Frédéric bug reports for v3.0 ++++++++++++++++++++++++++++++++++++++++
-
-
-
- WARNING: You should not use illegal hacks of the "Automatically activate
- any screen that is ever in front" variety. This is simply improper and
- just won't do. Hacks like this will not crash Chaos but they will cause it
- to behave in an annoying manner since hacks of this nature will constantly
- activate the WRONG screen. Do not use "AutoActivate FrontMost Screen" hacks.
-
- Failure to heed the above warning may cause the screen scrolling to stop
- working. This will prevent you from reading certain lengthy spell
- descriptions.
-
- MCP has such a hack. It should be turned off when playing Chaos.
-
-
- * FIXED that rawkey problem on the 2nd creature info panel that prevented
- screen grabbing! (Pressing ANY key at all was clearing the screen).
- NOW FIXED.
-
- * STUPID: Computer wizards senselessly cast Dark Wood trees adjacent to
- themselves. I have now implemented more advanced AI for use with this
- particular spell so this is NOW FIXED.
-
- * Several new predicates to support the new AI:
- int AdjacentFriendlies(int source, int cell);
- int AdjacentEnemyUndeads(int source, int cell);
- int AdjacentFriendlyUndeads(int source, int cell);
- int AdjacentEnemyWizards(int source, int cell);
- int AdjacentFriendlyWizards(int source, int cell);
- int AdjacentEnemyUndeadWizards(int source, int cell);
- int AdjacentFriendlyUndeadWizards(int source, int cell);
-
- * INTERLACE PROBLEM: Sometimes AGA users complain that certain chaos
- screens are in interlace. They want to make use of their AGA chips
- + their multisync monitors to produce a 100% solid flickerfree display.
- So I have now added a new cli startup option -d to force chaos to open
- all its screens in doublepal mode. I also added a new startup script and
- icon so chaos can easily be started in DoublePal mode from now on.
- DoublePal modes are noninterlaced and flicker free. NOW FIXED.
-
- * ADDED Polski, Norsk, Svenska and Finnish to the language menu.
-
- Complete info on Polish fonts and charsets is at
- Aminet:docs/misc/PolishCharset.lha
- --------------------------------------------------------------------------
- September 27th, 2000: I _finally_ got a finished polski.catalog from Artur.
-
- Here are the problems:
- Scavenge -> Padlinoûerca is too long. Can you think of a shorter word?
- Scierwojad, Padlinozerca, Sëp (bird that eats dead animals), Mordobocie.
- Padlinozercy (plural noun),
- Fei says: Zerowac with dotted Z is a verb that is what I want.
-
-
- Ranged Combat -> Walka Na Dystans is too long. What is polski for "Shoot"?
- Maybe "Shoot"->Strzelac or Strzal or Strzelanina would work better?
- Or perhaps WalkaNaDystans?
- Strzal for Shoot is what fei says to do.
-
-
- Magic Resistance -> Odpornoôê Magiczna is too long. How about
- "Magic Resist" or "Resist Magic"? ??
- Przeciwmagia=AntiMagic, Odpornosc na magie
- Odpornosc mag. is the way fei says to do it.
-
- ---------------------------------------------------------------------------
-
- * ADDED new code to make the top half of the 2nd creature info panel fully
- stringwidth sensitive. (I had already done this with the bottom half).
- This allows the Polski translations to fit without overlapping. DONE.
-
- * ADDED new code to make the text on the score screens fully stringwidth
- sensitive. This allows the polski translations to fit without overlapping.
- The numeric columns are unchanged. Seems to work ok.
-
- * Implement translated menus:
- 1. Make the strings into the catalog file and defines.h
- 2. Change ChangeLanguage() to put in the correct text via Message(M_?) into
- each of the menu fields.
- 3. Calculate the length of the menu name and of the longest string in the
- menu.
-
- The Intuition menus are now fully international and automatically adjust
- to the length of the strings in the menus. ALL DONE
-
- * Added code to center the translated strings of the demo over screen. DONE.
-
- * Fixed spell descriptions for Hydra, Flood Shield, Marid and Protection.
-
- ***********************************************************************
- THE LINKER HAS ATTACKED ME AGAIN!!!
- ***********************************************************************
- SLINK WITH temp_smk.tmp
- Slink - Version 6.58
- Copyright (c) 1988-1995 SAS Institute, Inc. All Rights Reserved.
-
- Error 502: _sprintf symbol - Distance for Reloc16 > 32768
-
- First Reference in Unit cast.c at offset 00003a04 in file 'cast.o'
- To Unit sprintf.c at offset 00001690 in file 'LIB:scm.lib'
- Caused by line 1929 in file cast.c
-
-
-
- I added 200 lines of new code to cast.c today. And this error started
- happening.
-
- I read the docs. They say to compile the file with code=far. But I
- already do that. I got this same error or a very similar one a few months
- ago so I had to add code=far to the compilation of cast.c.
-
- The docs also say that you can "declare the function to be far". But
- changing stdio.h prototype of sprintf sounds like a very bad idea.
-
- So I tried to compile the whole thing with code=far. I changed stdops to
- include code=far so that ALL modules would be compiled with cod=far.
- Then I did smake clean smake. It all had no effect.
-
- The docs say scm.lib is a lib of floating point stuff. But I don't do any
- sprintf floats in cast.c so I just totally don't understand this whole
- entire thing. The sprintfs in cast.c are all %s or %d.
-
-
- So what am I supposed to do????
-
- As far as I am concerned this must be a bug in the compiler or linker. I
- am compiling cast.c with code=far therefore there should simply not be any
- 16-bit branches in it. Therefore I should not ever get any 16-bit branch
- errors.
-
- Solution: Remove a bunch of code out of cast.c to make the code smaller.
- I am transferring all routines having to do with scoring and sorting cells
- for intelligent pit casting purposes into a new module IntelligentPitCast.c
- This has the code for intelligent Pit, Magic Glass and Weak Wall casting.
-
- This problem will probably resurface the next time I add in a bunch of new
- spells.
-
- Oh great! Now the compiler says I have conflict between 2 variables!
-
- I have
- static int id; in cast.c
- static UWORD id; in IntelligentPitCast.c
-
- and it says these vars are conflicting with each other!!!
-
- This is scary! They are supposed to be 2 completely different vars,
- each local to their own file!
-
- newl tested this same type of thing on gcc and it worked perfectly,
- exactly the way that it should. The 2 id vars were each completely
- different and independent of each other and it compiled perfectly.
-
- That's 2 major SASC bugs in 1 week! :(
-
- Ok I have hacked and slashed my IntelligentPitCast.c code to only share
- the vars that are absolutely needed in order to work around this evil bug.
-
- But this could cause other very serious problems now, or in the future
- (when I add another intelligence module) :(
-
- Arrgh! Now I'm getting multiply defined symbols. It says every function
- in IntelligentPitCast.c is multiply defined. Ok this is because I had in
- cast.c:
- #include "IntelligentPitCast.c"
- instead of the correct
- #include "IntelligentPitCast.h"
- So this variable conflict wasn't a bug after all!
-
- But that Reloc16 > 32768 thing is still a bug in the compiler.
-
- ***********************************************************************
- END THE LINKER HAS ATTACKED ME AGAIN!!!
- ***********************************************************************
-
- * Installed the new HUPL versions of all the fonts. These are the standard
- gamefonts modified by Attila the Hun to have all Hungarian chars in the
- proper places and then modified by Frédéric Delacroix to contain all Polish
- chars in the proper places. I then had Sau test the ChaosPearlHUPL font on
- his Amiga in Hungary using a Hungarian keymap and he reports all chars are
- there and everything is ok.
-
-
- * New function to support the new AI: FirstAdjacentHumanAlly()
-
- October 7th, 2000:
- * FLAW: Deutsch.catalog on 2nd scroll info panel goes off the right edge of
- the screen. Everything was working great with the English, Français and
- Polski catalogs But when I got the Deutsch.catalog it was going off the
- right-hand edge of the 2nd scroll info panel. I have now changed that
- panel so that the left column is right against the left edge and the right
- column is right against the right edge.
-
- * Goblin Bomb now picks up bows just like a regular Goblin.
-
- October 8th 2000:
- * Compiled v3.01d for Robin. The main executable is 349900 bytes!
-
- ######################### GOBLIN BOMB VOTING ##################################
- Vote: If you shoot a scroll of a Goblin Bomb, do you want it to explode?
-
- You may vote for it to explode (+1 point)
- You may vote against it to explode (-1 point)
-
- Or any number in between.
-
- James: +.25
- Sean: +.8
- Joseph: -1
- Zoltan: -1
- Frédéric: -.75
- Xavier: -.25
- JJ: -1
-
- Total: -2.95
-
- * Changed/fixed Goblin Bomb to no longer explode when shot. October 11, 2000
-
- * Also fixed it so that:
- * Shooting a scroll of an Earthquake, Generator, Stone Golem or Stone Giant
- no longer shakes the screen.
- * Shooting a scroll of a Hidden Horror no longer causes a Red Dragon to
- appear.
- * Shooting a scroll of an Elemental no longer causes it to become its
- Elemental Form (water, fire, tempest, earthquake)
- ####################### END GOBLIN BOMB VOTING ################################
-
-
-
- **************************************************************************
- BEGIN Ruthlessness Mode
- **************************************************************************
-
- When Ruthlessness mode is activated computer players will:
- 1. Cast pits, magic glass, walls, rocks and miner willy more intelligently
- and aggressively.
- 2. If they are an arborist they will cast shadow wood and dark wood trees
- in a more aggressive and intelligent manner.
- 3. Whenever a creature is engaged it will always attack the strongest
- creature that it can acutally kill. If it cannot make a kill then it
- will attack whichever enemy it feels is the most dangerous.
- 4. A shooting creature will always attempt to shoot the strongest creature
- that it can actually kill. If it cannot make a kill then it will shoot
- whatever enemy it feels is the most dangerous. They never try to
- shoot a wizard who is inulnerable or has a reflector.
- 5. A nonengaged ground creature will always check first if there is a path
- to any enemy wizard that it can kill. If it cannot kill any enemy wizard
- then it will check if there is a path to any favorite-food creature that
- it can kill. If it cannot kill its favorite food then it will check
- if there is a path to any bonus-spell creature that it can kill.
- If it can find a path to one of those things then it will charge
- after it and kill it!
-
-
- * Implemented new AI code for ruthlessness mode. Now ruthless computer
- players will cast pits, magic glass, walls, rocks, miner willy, shadow wood
- and dark wood trees in a much more intelligent and aggressive manner.
- This took 600+ lines of code and quite a lot of time. It added 7k+ to the
- size of the executable.
-
- * Conducted various tests of the new ruthless casting code. Everything
- seems to work ok.
-
- * Implemented new AI code for ruthlessness mode. Now computer shooters
- shoot the strongest thing that they can kill. If there is a tie then they
- shoot the most dangerous opponent. Wizards will not shoot and kill a
- creature protected by Eye for an Eye.
-
- * Conducted various tests of the new shooting code. Seems to work ok.
-
- * Implemented new AI code for ruthlessness mode. Now engaged computer
- creatures attack the strongest thing they can kill. If there is a tie then
- they attack the most dangerous opponent. Wizards will not attack and kill
- a creature protected by Eye for an Eye.
-
- * Conducted various tests of the new engaged attacking code. Seems to work ok.
-
- * Implemented new AI code for ruthlessness mode: flying nonengaged creatures
- attack the strongest thing they can kill. If they can't kill anything then
- they attack the most dangerous thing they can hit. If there is nothing
- they can hit from their current position then they fall back to the old
- movement routine.
-
- * Conducted various tests of the new nonengaged flying attacking code.
- Seems to work ok.
-
-
- Implement ground-based nonengaged creatures seek a good kill. (wizard,
- favorite food or bonus spell creature). If they can't do any of those
- things then they just fall back to the old movement routine.
-
- I spent 2 hours thinking up an algorythm to allow creatures to find their
- away around ANY set of obstacles to reach a desired goal. I came up with a
- recursive algorythm that would be ok for up to 6 movement points but it
- would take several hours in the worst-cast scenario of 15 movement points
- on an empty board on a 25 Mhz 030
-
- So then I spent 1 hour thinking up a split "search from both ends" strategy
- which would do 2 6 mp recursive searches. One from the source and one from
- the destination. This would have allowed all paths up to 12 movement
- points to be determined and would only take a few seconds in the worst-case
- scenario. Actually, I just realized this totally would not work at all
- because there can be multiple desired destinations... so it would only
- work if there was only 1 desired destination.
-
- With optimizations for not retracing steps and not taking paths for which a
- shorter route already existed I could do 7 mp search with no problem.
-
- Then I spent 2 hours coding the above routine and I began to
- realize how amazingly inefficient a recursive search was. yuk...
-
- So then I spent 3 more hours inventing a new search algorythm that is not
- recursive and is amazingly fast! It should be able to determine the BEST
- path to all points on the board in around .025 seconds on 25 Mhz 030. If
- the board was 4x larger than it currently is then it should take about .1
- seconds. 6 more hours of coding and it was ready to be tested.
-
- A couple of days later: well I had to make some adjustments and things to
- make everything work within the realm of Chaos. But now that it is done,
- IT IS TOTALLY AWESOME! I built some complicated mazes and then pressed the
- "m" key and it correctly showed all the places I could and could not move
- to! I kept randomly deleting pieces of walls and putting new walls elsewhere
- in an attempt to confuse it but it worked every time! WAY COOL!
-
- I had always been planning on optimizing the C code to make it go faster,
- or to rewrite it in asm if needed but it goes SUPER FAST on the very first
- try! So there is really no reason to optimize it at the present time.
- It is fundamentally a very efficient algorythm.
-
- I can now theoretically program computer creatures to find a path to any
- desired goal. However each goal that is searched for will have to be
- specially programmed in.
-
- This algorythm only finds clear paths to every square on the board.
- This algorythm does not currently try to calculate any sort of "hack your
- way through these certain barriers to reach your goal" type of stuff.
-
- This algorythm takes into account the fact that once you are engaged you
- can attack any adjacent square, even if you only have .1 movement points
- left.
-
- * BUG: There has always been a bug in the game whereby if you move some
- squares and then have only .5 to .9 movement points left it lets you move
- another full square! This is cheating! It takes 1 whole movement point to
- move in a straight line and 1.4142 movement points to move diagonally!
- I have now changed the inappropriate occurrences of "0.5" in move.c and
- cmove.c to say "1.0" now. However, you can still cheat and step diagonally
- on your last move when you only have 1 movement point left. SORT OF FIXED.
- I will work out a way to fix this last flaw later. Later: ok the
- movement system now works exactly the way it should. This is all 100%
- NOW FIXED.
-
- * IMPROVED cmovenonengaged() to take an extra path parameter. When this
- parameter is not NULL, the movement information comes from the path rather
- than the ChooseDestination() function. This way anytime I have calculated
- a path for a creature to follow I just keep calling cmovenonengaged() to
- make it follow the path. This way I am using the EXACT same movement code
- for both normal movement and path-following movement. So everything
- should always work perfectly.
-
- * Ok, I've got the path code in and working and computer-controlled
- creatures can now follow complicated paths to their destination. As I
- watched a 14 movement-point Hydra navigate a complicated obstacle course on
- his way to kill a Generator I noticed the following 2 bugs in the old
- original computer movement routine:
-
- * BUG: The computer movement routine deducts 2 movement points for each
- diagonal move instead of the correct 1.4142! This applies to computer
- creatures AND computer wizards! NOW FIXED.
-
- * BUG: The WRONG movement point value is shown all the time. It was taking
- the actual movement points left and rounding them DOWN to the nearest lower
- integer. NOW FIXED.
-
- * Line 58 and 59 in the catalog file are no longer used. They only showed
- movement points as (wrong) integers. Line 91 is now used instead.
-
-
- * Added code so that nonengaged exposed wizards will run into an unoccupied
- meditation if possible.
-
- * Modified "m" key to work, even in the middle of a creature's movement!
- I've been wanting this feature for years! I finally did it! And now
- that I've fixed all those 10 year old bugs in the move routines the m-key
- highlighted squares now agree perfectly with the printed numerical value at
- the bottom of the screen and with how far you _actually_ get to move your
- unit.
-
- * FIXED FindAllPaths() to handle mounts + level 2 mounts when the SourceCell
- contains an exposed wizard. (It already handled meditations). DONE.
-
- * FIXED "m" key ground movement to handle mounts and level2 mounts + ride.
-
- * FIXED "m" key flying movement! Just use the old code. DONE.
- (FindAllPaths is only for ground movement.)
-
- * FIXED "m" key flying movement to take into account
- "WillIGetEngagedIfIMoveThere". This way cells which you cannot directly
- fly to, but you can fly next to them, become engaged and then attack them
- will now be correctly highlighted.
-
- * Modified io.c to load/save Ruthlessness var finally.
-
- At the beginning of the Ruthlessness upgrade cmove.c was 24.5k in size.
- Now it is 61.5k!
-
- **************************************************************************
- END Ruthlessness Mode
- **************************************************************************
-
-
- Robin Schmidt writes:
- > The Pyrohydra has combat 15 and ranged combat 5.
- > But the discription tells me that the breath fire of the pyrohydra is one
- > of the strongest. I suppose you swaped the numbers?
-
- Wow! What a cool bug you found! I swapped the numbers back around.
- NOW FIXED.
-
-
-
- > 1. When questioning a cloaked object, the German text is too long.
- > We need a line feed + carriage return 8-)
-
- It took me 90 minutes to hack and slash an AntiAliasWriteTextLength()
- function together for this purpose. NOW FIXED.
-
-
- > Just had a game: I played with four wizards in my team against four computer
- > wizards and four generators. Everything enemy to me is destroyed. I attached
- > the savegame. When I cast the seperation spell the fight can go on, but why
- > doesn't the game finish now? My team has won!
-
-
- Team/Alliances and ending the game.
-
- End of Game Check will do:
- IF (everyone alive on the board is on the same team) THEN
- IF (all of those people were ORIGINALLY on the same team at the start of the game) THEN
- (The game is over, that team wins!)
- ELSE
- ? FD says to do nothing because this can make the game last a very
- long time and force a player to sacrifice multiple dragons via
- Justice/DarkPower/Vengeance in order to get bonus spells that allow
- for killing an unwanted reflectorized allied wizard.
- END_IF
- END_IF
-
- * Above code implemented.
-
- * BUG: Team[] gets saved and loaded with the savegame file but not
- TeamSettings[]! I have now fixed this, this means the savegame format
- has changed again. I am deleting all my old saved games and I am
- converting all the levels to the new format. NOW FIXED.
-
-
-
- > 2. The Nightmare has a combar value of 1? I think it should be higher, for
- > 'it's feet are burning hot' or something like that.
-
- I just deleted the sentence
- "They attack with their hooves which are burning hot."
- from the spell description so this is NOW FIXED.
-
- Of course now I will have to convince all the translators around the world
- to upgrade to the new spell description... 8/
-
- > 3. I cast the Dead
- > Revenge spell on my wizard and he is killed. Now the game asks if I really
- > want to play on or start another game ('Do you really want to start a new
- > game?')! I say no and see the generator - MY generator. But my old monsters
- > are asleep, I cannot do anything. And with the end of the next turn the game
- > asks again: Do you want to go on? Nay, me says and lo! there my generator
- > produces a Goblin for me. I can DO something - I can MOVE. But anyway the
- > game asks me if I want to play another game. Then I reached turn 24 and
- > everything was out - strange tale, isn't it...;-)
-
- hahahahheheehheha this sounds very funny! 8)
-
- Here's the deal: When all human wizards are dead the game is supposed to be
- over.
-
- Dead Revenge
- lets you have some small amount of influence in the game so long as there
- are other human players in the game. This presumably allows you to take
- some revenge on the human wizard who killed you so that (hopefully) you can
- weaken him and make some other human player or computer player or even the
- independents win.
-
- You are the very first player (besides myself) to test the new Dead Revenge
- spell. For years Dead Revenge didn't let you take ANY revenge at all! It
- just let you die and then gave the _independents_ a new generator in your
- place! If you died at the hands of the independents then this was doubly
- unjust!
-
- If you aren't going to play Chaos with all those visitors at your house
- then you could try playing where you yourself control 2 different wizards
- on a team against 4 computer wizards on a team. In such a game the Dead
- Revenge spell would work as you would like it too. (Although there is a
- theory espoused by certain Chaos Players that says something about it being
- a bad idea to let your wizard die in the first place 8)
-
- Btw: Frédéric wants me to somehow rig the replacement generator to have a
- chance of generating your wizard back into the game. I haven't really
- worked out how that would work yet.... I am thinking that after X number
- of turns it would automatically generate your wizard back into the game.
- I'm thinking a number like X=20 would work well. I think this would be
- unbelievably cool in a large multiplayer game.
-
-
- > Another question: When calling the About window it says: 'Return Of The
- > Wizards'? Why?
-
- I asked myself that same question the first time I saw it.
-
- The answer is:
- It is a reference to the facts that:
- 1. There were powerful wizards in ancient times, but their knowledge was
- mostly lost over time.
- 2. The game takes place in the far flung future when scientists have
- rediscovered and reinvented the magical powers that were once commonplace
- in Atlantis, ancient Egypt and other lost civilizations.
-
- Didn't you ever wonder how the Pyramids were built? Well its pretty darn
- easy when you have complete control over a Brontasaurus. Whole teams of
- Brontasauri even.
-
- But dinosaurs really eat a lot... and they severely overgrazed the land...
- giant dust storms ensued... the entire area turned into a desert. A
- terrible ecological disaster from which they still have not recovered 5000
- years later.
-
- It says "Battle of the Wizards" in some places and "Return of the Wizards"
- in other places. I was thinking of having it say "Wizard Wars" or
- "Strategy Game of the Century" or ? But it seems ok like it is.
-
- October 19, 2000:
- * CHANGED spell descriptions of: Bat, Nightmare, Virtue.
- Sent them to FD and SF. Included new FD French versions.
-
- * ADDED code to keep track of total time spent playing chaos and total
- number of turns played. Now I just have to decide where I will display
- this information.
-
- October 20, 2000:
- * Sent v3.01 to FD for betatesting.
-
- * INCREASED the code to keep track of total time spent playing chaos to
- keep seperate totals for each of the 8 players + the independents.
-
- * Added code to switch to the HUPL font when selecting Hungarian or Polish
- from the Language menu.
-
- * Chaos release executable is now 368704 bytes in size.
-
- * The toe of the Babboon is all messed up. NOW FIXED. + I drew some blood
- on the dead body.
- * Pieces of the Skeleton animation were not antialiased. NOW FIXED.
- * Amphisbaena is all messed up! NOW FIXED.
-
-
- ********************* BEGIN Robin Stuff *******************************
- Robin writes:
- > 4. I think the Goblin Bomb makes it too easy to kill generators. Try it:
- > Place a Goblin Bomb next to a generator. Shoot at it until it dies.
- > Destroy the generator with any adjectant creature (even an orc).
- > It's far too easy!?!
-
- Well in a "real" game with say 8 generators it isn't so easy. I mean,
- first you have to _get_ the goblin bomb next to a generator. This is easy
- if your wizard is standing next to a generator but if you are standing next
- to a generator in a normal game then you are probably going to get killed
- very soon. Perhaps this is why you like Dead Revenge so much? 8) hehehe
-
- Ok so if you are a safe distance away then you have to walk your
- Goblin Bomb up to the generator and it will be very challenging to get
- him there without some independents killing him prematurely.
-
- Also, I have found that it is quite challenging to get a Goblin Bomb into
- position without at least taking some damage onto my own creatures.
-
- And lets say that you are such a good tactician that none of what I have
- just said applies to you. Well its ok for it to be "easy" to kill 1 or 2
- generators in a game. Its the only way to survive when playing against 16
- generators!
-
- And lots of times I've had Goblin Bombs but no shooting creatures. So I
- get my Goblin Bomb into position and then some bozo comes along and kills
- him! Then they kill the generator! So I don't get any bonus spells for
- it!
-
- > My dear, you talk too much. But what is most anoying - you are right. So we
- > leave the topic.
-
- > Now my great BUG!!!:
- > Yesterday (or tomorrow, don't know) I got the Touch Of GOD (nice one 8-)! So
- > I made my Wood Elf a godlike creature. A when it moved around killing here
- > killig there killing everywhere it suddenly was promoted to a Dread Elf
- > (ooohh, how dreadful)! But then I saw that his life force was decreased, and
- > so were Magical Resistance and healing capabilities! That's no good, my
- > dear. And I presume this 'feature' can be used with any promotable creature
- > that is under the Armour and Protection spells. No other values were changed
- > though, so my dread elf was still of much use to me...
-
- Ok I read over the code that controls this and I see no possible way this
- could happen. All the stats are promoted the same way so they should
- either all promote correctly or none of them should promote correctly.
-
- So I played a test game and cast Touch of God onto my Wood Elf. On the 4th
- kill he was promoted to a Dread Elf. The only thing wrong with him was
- that his manuverability didn't promote right (I forgot to promote that stat
- in the code). So the Manuverability stat promotion is NOW FIXED.
-
- The only thing I can figure is that your Dread Elf was attacked by a
- creature (while you weren't looking) that caused the leben damage.
- Possibly your Dread Elf was attacked by something holding a Poison Dagger,
- that would mess up your leben recovery rate.
- And that you just mixed up manuverability and magic resistance.
-
- > NO! There
- > was another thing I forgot to tell you: The Leben (you have to write it with
- > a capital letter in German 'cause it's a noun...) value was increased by
- > using the Armour spell (which was called by the Touch Of God, I think), and
- > then, when I call the info panel, I see from the pictures, what happened to
- > my elf (there were the Red Cross, the Shield, the Range Boost Arrow and...
- > and the Armour). After he was promoted, there wasn't any Armour sign any
- > more! Im totally sure about that!
-
- The Armor sybmol is algorythmically generated each time you look at the
- info panel. If your life is 15 points higher than your normal maximum then
- it draws the Armor symbol. Several other symbols work in a similar
- fashion.
-
- So your Touched by God Wood Elf had probably taken a few hits during his
- conquests right?
-
- Lets say he had taken a few hits and was down to only 50 life points.
-
- Well when he got promoted to a Dread Elf his normal life would be 39 life
- points but he still keeps his 50. 50 is not 15 higher than 39 so it would
- stop drawing the Armor symbol.
-
- Dread Elves come with 39 life points built-in. So for it to draw the Armor
- symbol would require him to have 54 life points or more.
-
-
- There are still lots of strange things in the game that you haven't found
- yet. And some secret things too.
-
- > I just found one: I made my Magic Wood
- > walk via StoneToFlesh. I boosted it a little bit with some Combat training
- > and tried to attack the next wizard. Well it worked fine, but then the
- > wizard just entered my Magic Wood and disappeared! I could still move my
- > Wood and attack, but the wizard remained in it. Some turns later my wood was
- > destroyed from within by the evil wizard and he got a spell. :-(
-
- Hehehehe
-
-
- *************** END Robin Stuff ******************************************
-
- *************** BEGIN Frédéric Stuff *************************************
- FD Writes:
- > I saw once (I think it was when a wizard had just been killed) a string
- > like "Movement points= -98.50). I can't remember the exact circumstance
- > unfortunately.
-
- I looked over the code and I only saw 1 place where this could be
- theoretically possible so I rewrote that piece of code.
- ALLEGEDLY NOW FIXED.
-
-
- > * Something has changed about shadow wood. It seems to me that they don't
- > attack anymore when computer-controlled.
-
- The code used to erroneously say (This used to let people cheat and move 1
- extra square sometimes.)
- DO_WHILE (moveleft >= 0.5)
-
- So I erroneously changed it to:
- DO_WHILE (moveleft > 1.0)
- Which prevents things with exactly 1 movement point from moving.
-
- Now I changed it to the proper:
- DO_WHILE (moveleft >= 1.0)
-
- NOW FIXED.
-
-
- > * I cast alter reality on a wizard's mount and it was turned into a
- > goblin bomb. However, the goblin bomb did not explode when I killed
- > it. It should explode, but should the riding wizard be harmed too ? I
- > think so but ?
-
- That's hilarious! You come up with the weirdest stuff! :)
-
- 1. Goblin Bombs have never done the explosion effect on empty cells.
- I did not attempt to change this. But someday I would like to have just
- *1* really BIG, 9-tile big (3x3) nuclear explosion animation that we can
- use as the cell effect animation for this effect. Or actually it could be
- ANY animated explosion whatsoever.
- 2. With clever rewriting of the Reinstate() function I was able to make
- mounted Goblin Bombs explode as usual. NOW FIXED.
- 3. Goblin Bombs have never harmed the cell that they are in. I have now
- hacked in some extra code so that they now damage a mounted wizard.
- Same thing for the Volcano. NOW FIXED.
-
- ****************** END Frédréric stuff *************************************
-
- October 26, 2000: Sent a new v3.01 to FD for betatesting the AI.
- Executable filesize = 368892.
-
- Sent a new v3.01 to SAI for betatesting the AI.
- Executable filesize = 386456 This means the level editing code is 17564
- bytes in size.
-
- =========================================================================
- FD Writes:
- > * I vanished a horse into the future, and it reappeared some turns later in
-
- You vanished a horse?? Was this a really BIG, bad, scary horse or
- something? :)
-
- > the rightmost column. But the drawn area was 1 pixel too wide, damaging the
- > spell selection graphics. This was refreshed very quickly though. Actually,
- > this seems to happen everytime something is drawn in the last column.
-
- I think it only happens during the CellEffects TELEPORTIN and TELEPORTOUT.
- NOW FIXED.
-
-
- > * When a creature gets promoted, its manoeuvrability recovery is reset, not
- > kept.
-
- NOW FIXED.
- ==========================================================================
-
-
- October 29th, 2000: I voted straight Libertarian. I also voted against
- the lame "Arena Proposal" to give millions of tax dollars to the Houston
- Rockets & Comets basketball teams.
-
- -----------------------------------------------------------------------
- FD Writes:
-
- > * A sleeping ghoul is still animated and scavenging. I can't remember
- > exactly how it happened, but this could be due to impurities.
-
- NOW FIXED.
-
-
- > * If a computer wizard has a solar, then the solar does not move.
-
- NOW FIXED.
-
-
- > * I noticed that since you introduced the new dead revenge, when a creature
- > changes side to that of a dead wizard (haunt or impurities), this wizard
- > gains control of it, even though he did not cast dead revenge when he was
- > alive. Is it a wanted effect ?
-
- Yes, this is a wanted effect. The new rule of the game is that if a
- wizard owns things on the board that are not asleep or dead or a scroll
- then he gets to use them as usual. Even if the wizard himself is dead.
-
- This is what allows Dead Revenge to be such a useful spell now.
-
- > * Unless I missed something, when I cast a vortex on a corpse, the corpse is
- > destroyed when the vortex moves. It should either be vanished, or left
- > behind.
-
- This is a game secret. Just because the corpse is not there when the
- vortex moves does not mean it is destroyed. Can you figure out where the
- corpse has gone?
-
-
- > * In one of the first emails we exchanged, you told me you'd change the
- > magic knife to improve combat by only 2 points instead of three so that it
- > is really different from magic sword. It seems to me it still adds 3 points.
-
- Someone must have cast vodka on you again. You are imagining things again
- :)
-
- Wait till you sober up then try casting Magic Knife again and you'll see
- that it works properly. :)
-
-
- > * It would be nice, in the bonus panel, if the number of spells to pick was
- > decreased each time I pick a spell.
-
- NOW DONE.
-
- > * During spell selection, when I press "c", it shows me where I can cast the
- > spell under the mouse pointer. But then I must click elsewhere to be able to
- > press "c" again on another spell. It would be nice if we could press "c" on
- > different spells without having to click in between.
-
- This is a problem with _all_ keypresses, not just the "c" key. Originally
- I programmed all keypresses to work exactly the way you describe. Then one
- day Sean changed it. I didn't like it but I assumed he had a good reason
- for it so I decided not to mess with it until someone complained about it.
- NOW FIXED.
-
- END FD Writes.
- ------------------------------------------------------------------------
-
- * November 1, 2000: Sent v3.01d (19) to Artur Chlebek for testing the Polski
- translation of the .catalog file and the HUPL fonts and the Screens/Polski/
- The executable was 369192 bytes.
-
- * Included Stephen's Magyar spell descriptions A-Z. They still need
- to be spell-checked.
-
- * Robin wants a special version with a time delay on what the wizards are
- saying/thinking during their spell-selection AI. Sent v3.01d (24) specially
- modified to him.
-
-
- November 2, 2000:
- Artur Writes:
- > It seems that there is something wrong with support for HUPL fonts - I
- > checked them in DPaint and all polish chars are OK and in proper
- > "places". But Chaos doesn't seem to use them - only script font
- > (ChaosHUPL) seems to be used when proper option is enabled. All other
- > fonts (ChaosCalligraphy & ChaosPearl) seems to be used in original
- > versions - not their HUPL equivalents. :/
- >
- >> Can you give me an example string where the char is wrong and I will
- >> check this.
- >
- > /"Name/ wybierz zakl_e_cie." (polish equivalent of "/Name/ select your
- > spell.") - underlined "e" has some 2 dots on the top of it, while it
- > should be a mix of "e" & ",".
-
- The problem was that I closed the old fonts and opened all the new ones
- correctly but that is not enough. The fonts must be plugged into every
- rastport and screen in the game. NOW FIXED.
-
- * Sent a new v3.01 (20) sto Artur for testing the fixed HUPL font support.
- executable filesize = 369668.
-
- * FLAW: In Ruthlessness mode, flying creatures seem to take about 6x longer
- to move than in regular mode. This is noticeable on my 25Mhz 030 but
- perhaps not noticeable on faster machines. NOW FIXED.
-
- * FLAW: The "m" key can take up to 1/3 of a second. The above fix now
- makes the "m" key around 10x as fast (in other words, back to being as
- fast as it was supposed to be).
-
- * FLAW: Computer creatures in Ruthlessness mode take up to 6x longer to
- decide who to shoot. NOW FIXED.
-
-
- FD Writes:
- > * A (allied) computer wizard cast 3 pits around a generator in a corner. He
- > had 5 pits left to cast, and he could do so around a generator on a border,
- > but he chose to cancel the spell.
-
- He didn't actually cancel the spell. He cast the wall pieces into
- various parts of your computer's memory :) This triggered jillions of
- enforcer hits on my machine. This bug happened when a computer player
- tried to surround something that was on the edge of the map.
- ALL NOW FIXED.
-
- While watching the computer cast Weak Walls in FD's supplied autosave, at
- first I thought that the computer was casting them a bit strangely. He
- could have cast just *1* pit into the upper left corner and that would have
- completely blocked off 1 generator.
-
- But then I carefully examined what the computer player did and I realized
- that _EVERY_ wall that he cast blocked off a generator! One of the walls
- even blocked off *2* generators! And all the generators that he blocked
- were closer to him than that obvious one in the corner! So he was actually
- being rather intelligent about the whole thing.
-
-
-
- > * When Virtue kills a bonus creature (white dragon, stone golem etc), no
- > bonus spell is awarded.
-
- NOW FIXED. Btw: There are only 3 bonus spell creatures that Virtue
- currently kills: White Dragon, Stone Golem and Air Elemental.
-
- * FLAW: No points are awarded for killing creatures with Virtue. NOW FIXED.
-
- > * An independent red dragon was engaged to one of my undead inanimages, but
- > he was also adjacent to my dragon nest, which was the only object he could
- > attack. However, he did not attack the dragon nest, he just shot it. This
- > makes me think he tried to attack the undead inanimage, which is stupid
- > since the dragon is intelligent enough to see it's an undead.
-
- This is a flaw that has always existed. NOW FIXED in both normal mode
- and Ruthlessness mode.
-
-
- > * My wizard just vanished because of impurities ! First time I see this !
-
- Actually the line of code that allowed impurities to vanish things was
- commented out for some reason. I have just now reinstated it.
-
- > Actually, he was vanished by an independent chronomancer.
-
- HOORAY for the Chronomancer!!!!! He actually did something useful! He
- vanished your most valuable asset!
-
- > The trouble is
- > that 1) he has not reappeared for a very very long time. I guess this is
- > because there are no empty cells on the board. They all have at least a
- > corpse. 2) I don't have access to the menues to quit the game 3) What if the
- > board was full of independents ? The game would never end and I would never
- > get the chance to select a menu !
- >
- > * I'm now on turn 148 and my wizard still hasn't reappeared. He was vanished
- > around turn 80 ! I'm including the autosave. I think this is because the
- > world is full of corpses. The vanished objects should be given a chance to
- > reappear on a corpse after, say, 10 turns, or in place of another (random)
- > object that would be vanished in turn.
-
- Ok I have investigated the WarpIn() code that controls the reappearance of
- warped creatures and yes, indeed your problem was caused by all those
- corpses. Here is how the code worked:
-
- After WARPTURNS have passed, each turn try ONCE to reappear the creature
- onto the board. This was done by randomly selecting a square on the board.
- If the square is not TOTALLY EMPTY then too bad for you. You don't get
- another chance to reappear until the next turn.
-
-
- So in your game if there were only 5 completely empty squares on the board
- then you would have only 5 chances out of 238 of reappearing each turn.
-
- Ok, I have now completely rewritten WarpIn() to do the following:
- After WARPCOUNT turns have passed then the object in question WILL reappear
- randomly onto some completely empty square. If there are no completely
- empty squares then the object WILL randomly reappear on top of some corpse,
- thus destroying the corpse. If there are no corpses anywhere on the board
- then some random thing will be WarpOut()'ed then the object in question
- will be WarpIn()'ed to that now empty square.
-
- I tested this new code on FD's supplied savegame. NOW FIXED.
-
-
-
- > * When a creature which has +4 scavenging and only 1 point to heal, it's
- > still displaying life +4.
-
- I have adjusted it to show the amount that it actually scavenges.
- Tested and works perfectly. NOW FIXED.
-
- While testing the new scavenging code I was playing a little test game.
- A Goblin Bomb popped out of an independent generator. So I was like
- "Cool! I'm gonna kill it then kill the generator!" Only 1 problem, I only
- had 2 creatures. My Goblin and Gorilla were close to the Goblin Bomb, my
- Wizard was 4 squares away. I had no shooters, no flyers and no creatures
- that move more than 1 square on my list. So I kept casting various Goblins
- and Gorillas and as they marched up to the Goblin Bomb to kill it they
- would get blown away by the independent Ogre Mage who had clear and easy
- shots on anything between my wizard and the generator. Ok so this was
- hopeless for the next few turns. Then suddenly I got a spell that I never
- use: Request! I carefully analyzed everything on my list... I had a LOT of
- spells that are better than request. I usually just discard Request. But
- I _REALLY_ needed a shooter or a flying creature or even just a reasonably
- fast creature like a Centaur or Unicorn. So I prayed and prayed for
- something along those lines and then cast my Request.
-
- > What creature did you get ?
-
- If I would have got a Vulture, Eagle, Floating Eye, Unicorn, Centaur,
- Bolter, Elephant, any form of cat, or any of a number of other creatures
- then I could have killed the generator on that turn. But nooooo... I got a
- Ghoul. Luckily Ghouls are undead so that it could survive the 3 or 4
- squares he had to walk from my wizard to the Goblin Bomb + Generator. So 3
- or 4 turns later I was able to kill the Goblin Bomb and Generator.
-
- So the moral of the story is: Even spells that one never uses, _can_ be
- vital in certain rare situations.
-
- * BUG: Using the "m" key on an engaged creature sometimes produces somewhat
- wrong results. NOW FIXED.
-
- Robin Writes:
- > I tried the Brustroem's Browser spell.
- > I used the spell and look into the different spell books. But when I
- > wanted to choose a spell, the game did not let me choose from my list but
- > from the list of player 2. I attached a savegame.
-
- Ok the last time I fixed Burstroem's Browser I wrote the right code but I
- put it in the wrong place. This means that for the last 4 months the spell
- has been letting people CHEAT and cast spells from other people's spell
- lists! NOW FIXED.
-
- November 5th, 2000:
- * Added the 7 yes/no type strings to all the .catalog files.
-
- SAI writes:
- > Speaking of the info panels I've recently decided it would
- > be nice to be able to see the life of a creature by simply
- > placing the mouse over it.
-
- How about at the bottom of the screen:
- Wizard 1 (Sean) Life 19
- NOW DONE.
-
- November 6th, 2000:
- * Sent v3.02 to FD and SAI for further playtesting.
- Executable filesize = 370196
-
- * Sent v3.02t (23) to SF for testing Hungarian font support, etc.
-
- * The newsmedia is stupid. re: Election.
-
- November 7th
- * BUG: M key shows that I can attack undeads when really I can't.
- NOW FIXED.
-
- * FLAW: The scroll panel does not 100% handle spell descriptions that are
- not all on 1 line. NOW FIXED.
-
- * Added code WaitVBlank(2); to all the keypresses so that, for example,
- when you are holding down the "s" key to see where you can shoot, the
- flashing is more solid and pleasing to the eye.
-
- * Made an archive backup of all English Spell Descriptions to
- sc:SpellDescriptionsBackup.lha
-
- * Ran FD's ReflowSpells.rexx script on the English spell descriptions.
- It didn't flow them like I wanted. It went well beyond the defined
- LineLength var. So I changed the script a bit and now it flows EXACTLY
- like Cygnus Ed Professional does (Format/WithoutFill).
-
- * Henceforth I will keep all spell descriptions with a max line length of
- 77 chars.
-
- * Casting Brain Boost on a creature with max intelligence now raises its
- intelligence recovery by 1 point.
-
- * REWROTE Double and Triple spell descriptions to say that you cannot
- double or triple any spell which grants multiple attempts.
-
- * BUG: When 3 lines of text are displayed in the bottom text area of the
- main screen, lines 2 and 3 overlap each other a bit. NOW FIXED.
-
- FD Writes: ------------------------------------------------------------
- > * I was asked a very strange question: "comrade nobody, would it be OK for
- > you if I put this weak wall there next to your nothing ?" :-D ROFL !
-
- NOW FIXED.
-
-
- > * The answer to the question that was accepted was "y" and not "o" as is
- > supposed to be in french mode.
-
- NOW FIXED.
-
-
- > * Something is wrong with the cloak graphics, I'm always mistakening it as
- > "X-ray" ! I cloaked an enemy golem !
-
- Well I programmed a really nifty gfx system so that you can redraw any
- spell that you don't like.
-
- Btw: hehehe its very funny that you cloaked an enemy golem. :)
- Your AI must have some bugs in it. :)
-
- END FD Writes ----------------------------------------------------------
-
- * CHANGED Wood Elf to require 5 kills to promote to Dread Elf. After
- extensive playtesting I have come to the conclusion that a Dread Elf
- is just to powerful to be allowed after only 4 kills. It should be
- changed to 5 or 6. Btw: it was _originally_ 5 kills when Sean first
- implemented it so I'm just setting it back like it was.
-
-
- While creating the new CellEffectList() function I noticed that the
- algorythmic sound effects controlled by the menu option only apply to
- independent creatures. Thus you can turn off the algorythmic sound effects
- of the independents but not of computer controlled wizards. Should this be
- changed?
-
- * FLAW?: Turning off algorythmic sounds does not affect the sound of the
- standard algorythmic "attack" sound. NOW FIXED.
-
- Sunday November 12th:
- I have gotten almost no work done since the election. Al Gore is trying to
- steal our election from us! Using dastardly lawyer manuvers! This is very
- upsetting and the political chaos is worsening every day :(
- I can't concentrate on programming under such conditions. :(
-
- * Problem: Special combat attacks take too long when there are many special
- combat attackers on the board. I made a new CellEffectList function and
- rewrote the SpecialCombatHandler so that all the special combat graphical
- effects of a particular creature happen simultaneously for up to 8x speed
- improvement. NOW FIXED.
-
- * Robin and FD want your artifacts to go back to NOBODY when your wizard
- dies (instead of having them fall asleep). NOW DONE.
-
- * Problem: Computer-controlled flying creatures keep choosing to attack
- earthquakes when they should really be attacking the nearby enemy
- creatures. This is because earthquakes are set to have 15 combat for some
- reason. I have now changed earthquakes to have 0 combat. Is this ok?
- NOW FIXED.
-
- * Added: FD's new EndTurnSelect.iff and QuestionMarkSelect.iff
-
- * Edited / Antialiased QuestionMark.iff and QuestionMarkSelect.iff
-
- * FD says Agents should be highlighted while casting spells. I looked
- into this and there was already code to do this. However they weren't
- highlighted until the instant that the spell was about to be cast. I have
- now changed this so that the creature is highlighted immediately, before
- any text is printed to the screen. Thus the creature will now be
- highlighted for a longer period of time, without making anything take
- longer and without slowing the game down any. Hopefully this will be
- good enough. NOW DONE.
-
- * ADDED Highlighting of real Generators because I like the Agent
- highlighting so much.
-
- Robin Writes:
- > I found another flaw: When using the Move It spell you're suddenly able to
- > move the Solar on your own account. That's not good my dear oh no...
-
- Congratulations, you have discovered another game secret.
-
-
- November 13th: I haven't heard from Xav in weeks. I was going to ask FD to
- call him on the phone or drive to his house to see if he was still alive or
- not. I was very worried about him. But today I _finally_ heard from him!
- He was in the hospital with an appendicitis! He could have died! :(
-
- * Random Bug: Sometimes when the game loads Mod.ChaosTheme1, infinite
- enforcer hits are generated and all the fonts are destroyed.
-
- November 14th, 2000:
- * Assembled FD's new misca.asm for the music system to hopefully fix the
- above bug.
-
- In order to test the new music system bugfix I have decided to play a REAL
- game of Chaos. I normally either,
- A: Never play a game of Chaos.
- B: Only play default games of me vs. 1 wizard and 4 generators. I usually
- win these games in less than 24 turns.
-
- Ok, so now I will try me vs. 1 cpu wizard and 99 generators, Texas
- Trash'em, 99 spells. Both the cpu wizard and I died on turn 1
- 4 games in a row. I never started with cloak or lich so it was pretty
- hopeless for me.
-
- Now I am trying me + all 7 cpu wizards in an alliance against 99
- generators, Texas Trash'em, 99 spells.
-
- Turn 1:
- I cast Weak Wall and blocked off a few generators. So did 2 or 3
- of my Allies! We've already blocked a bunch of generators!
-
- Turn 2:
- I cast Lich on my Wizard. Now I can win!
-
- * UNBELIEVABLY STUPID! All wizards are in an alliance against 99
- generators. One of the computer wizards cast Coercion on turn 3! Now we
- are all going to get killed because of this! NOW FIXED.
-
- Well we can't defend ourselves now, so a different wizard gets killed every
- turn. I couldn't cast spells for 5 turns! By the time I could cast a
- spell to help my allies the last one was dead! (He had been cloaked and
- recover boosted.)
-
- * FLAW: There is never an exophagy icon on my powerups list. NOW FIXED.
-
- It is now turn 81 and I've never ever had a Recover Boost the entire game.
- I did however get 2 Exophagy spells which I cast on my wizard and his
- replicate. I've decided that Exophagy provides more strategy than Recover
- Boost. Scavenging provides more strategy than Recover Boost also.
-
- Well I haven't seen the random music bug in 81 turns so I guess its gone.
- However this is not really a bonafide test because I usually play with
- speech and sound fx on, but this time I have them turned off for speed.
-
- Turn 83: I am turning the sound effects and speech back on.
-
- Turn 92:
- I killed 7 generators, a T-Rex and a Stone Golem on 1 turn and now I get to
- pick any 9 spells out of a list of 30.
-
- Then during my next turn, I attacked with my Ghost and the ghost sound got
- stuck in an infinite loop! And it was generating infinite enforcer hits!
- Ok so I opened up a shell and typed "who", it said that cli 9 was running
- the ChaosDigitalSoundSubProcess so I typed "break 9 c" and it stopped the
- enforcer hits and the sound. But now the game is in some sort of "not
- accepting any input" mode so I can't do anything in the game. :(
-
- During this game I was offered Dead Revenge on my Bonus Spell Selection
- panel at least 10 times. I never picked it though. I had cast level
- twice.
-
-
- I theorize that JCsound has some sort of bug whereby if there is a CPU load
- right at the moment of starting (or buffer switching) a sound sample then
- there is a finite possibility that things can get hung up.
-
- 2nd theory: Something about the computerized speech or the algorythmic
- sound effects routine is corrupting the audio.device.
-
- Anyone who can solve this mystery automatically receives the
- "Hero of the Month Award"
-
- Months later James Conwell finally solved this bug! Oh that's me, thank
- you. :)
-
- * FLAW: The score column is not positioned well on the score screen.
- My score on turn 92 is 11602 thus placing it up against the Life value.
- NOW FIXED.
-
- * FLAW: Score screen score column is WAY out of position when playing in
- Deutsch or Polski. NOW FIXED.
-
- * BUG: Load any saved game and look at the score screen. The life totals
- have not been freshly calculated so they are wrong. NOW FIXED.
-
- On 14-Nov-00, Frederic Delacroix wrote:
- > * Uncertainty suffers from the same flow as vanish did before you fixed it.
- > If there are many corpses, it will almost never generate anything.
-
- I changed this so that it can now generate onto empty squares or onto dead
- bodies. NOW FIXED.
-
- Note that if the board is mostly full of "stuff" (creatures, inanimates,
- growths) then Uncertainity will probably not generate anything for you.
- Its something to do with some law of physics that says you can't have 2
- things in the same space at the same time. 8)
-
- November 16th:
- Sent v3.03 to FD and SAI for playtesting. Executable filesize is 371880
- bytes.
-
- END OF VERSION 3.03
-
- * EDITED Magic Carpet and Chainsaw graphics a bit.
-
- * PROBLEM: I hate the animation of the Bolter. So I just now changed it to
- something else. It is now somewhat better than before, but still not
- very good. Someone needs to fix this up.
-
- FD Writes:
- > * A wizard just cast poison dagger on its own bolter. Considering that a
- > bolter can never attack, this is kinda stupid.
- NOW FIXED.
-
- > * When dismounting, the "M" key shows a lot of places where I cannot move (I
- > have wizard wings+speed but I can only move one square in this situation).
- NOW FIXED.
-
-
- * Aaaaaaugh! Reveal was set to only be a ranking of 4! This is why
- computer wizards never cast it on anyone! I am now raising it to 44 so
- that, basically, if they _can_ cast it on an enemy then they will.
-
- * Sean and Frédéric both hate the green square for cloaked creatures. This
- same green square is also used to draw unexplored squares. Also FD has
- complained that the Cloak graphic is easily confused with the X-Ray
- graphic. So I have now drawn a new Cloak graphic which is used for 3
- things:
- 1. As the graphic for the Cloak spell.
- 2. As the graphic for a cloaked creature.
- 3. As the graphic for an unexplored square.
-
- If you do not like this graphic then you are free to draw a better one
- and it will automagically appear in the game.
-
-
- * CHANGED Earthquakes back to 15 combat and adjusted the
- DangerousnessRating() routine to ignore combat, ranged combat, etc.
- when rating an inanimate object. I did this so that a person could
- theoretically cast No Grow then Stone to Flesh on an Earthquake and have
- a powerful max combat creature. I realize this will hardly ever happen.
- But it only needs to happen once for it to be all worthwhile.
-
- END OF VERSION v3.04 FOR TRANSLATORS!
-
- BEGIN VERSION v3.05 NEW SPELLS UPGRADE.
-
- * ADDED 16 new spells including:
- 1 artifact creature
- 2 other normal creatures
- 1 meditation object
- 12 magic spells
-
- 1. Global Thermonuclear War
- 2. Conwell's Cow Catapult
- 3. Heal
- 4. Vox Angelica
- 5. Vox Celestes
- 6. Resurrection
- 7. Magic Carpet
- 8. Tribal Dance
- 9. Chainsaw
- 10. Shambling Mound
- 11. Stomp
- 12. Delacroix's Decloaker
- 13. Night of the Living Dead
- 14. Hand Grenade
- 15. Feeble
- 16. Martyr
-
- As I feared, when I added these new spells I am now getting that silly
- >32768 error so I quickly syphoned off all the agentcasting stuff into a
- seperate file "AgentCast.c". I did this because it looked very small,
- simple, self-contained and easy to do. But I guess that wasn't enough
- because I am still getting the the following error:
-
- SLINK WITH temp_smk.tmp
- Slink - Version 6.58
- Copyright (c) 1988-1995 SAS Institute, Inc. All Rights Reserved.
-
- Error 502: _sprintf symbol - Distance for Reloc16 > 32768
-
- First Reference in Unit cast.c at offset 00003ad0 in file 'cast.o'
- To Unit sprintf.c at offset 00001690 in file 'LIB:scm.lib'
- Caused by line 1943 in file cast.c
-
-
-
- Ok, I syphoned off the intelligent creature casting code into
- IntelligentCreatureCast.c and now it takes longer to do a complete
- recompile but at least it works.
-
- November 20th, 2000:
- * Chaos now has 365 spells! 1 for every day of an Earth year!
-
- On my 1st test game I started with a Global Thermonuclear War spell!
- Woohoo! Even though it is only probability 5!
-
- On my 2nd test game I started with 2 Magic Carpets, Heal and Tribal Dance!
- Wow! Its amazing how adding just a few new spells can immediately make the
- game more interesting!
-
- November 21st, 2000:
- * Included Xav's new Feeble, Hand Grenade, and Tribal Dance gfx.
- I put Explosion and Kamikaze into gfx/UnusedGfx/ for future use.
- I edited his new Martyr graphic to show the Martyr hanging high up on the
- wall.
-
- * I Made a new level: Equivalency1 to test all the new spells.
- It is 1 human-controlled wizard vs. 1 computer-controlled wizard. Both
- wizards have an identical spell list.
-
- * PROBLEM: When an archer loses his archery ability the arcing weapon
- effect is still drawn. NOW FIXED.
-
- * PROBLEM: When a creature that is normally not an archer, gains the
- archery ability, the straight-line weapon effect is still drawn. I have
- now fixed this to make it draw the arcing weapon effect. NOW FIXED.
-
-
- November 28, 2000 SAI Writes:
- > I liked the multiattack made by trees, ropers, fungi,
- > etc. The only problem is that they make the attack
- > sound even when there is nothing for them to attack.
-
- NOW FIXED.
-
-
- > The sound made by a computer controlled Shadow Wood
- > is a nice "whoosh", but when a Shadow Wood controlled
- > by a human player attacks, it is only the traditional
- > attack sound.
-
- I am playing a test game right now and both human and computer controlled
- Shadow Woods are making the same whoosh sound.
-
- Perhaps you meant Dark Woods? Or perhaps you meant Stone to Flesh'd Shadow
- Woods? or ?
-
-
- > The Consecrate spell wraps off the edge of the screen.
-
- NOW FIXED.
-
-
- * Added the Gadget to control Ruthlessness on the 2nd setup screen.
- * Added Ruthlessness to the ascii prefs routines.
-
- December 3rd, 2000:
- ML sent in 17 Polski spell-translations, + a few words translated from
- several others stating that I must give him a registered version or he
- would quit. I tried to explain to him that 17 spell descriptions isn't
- even close to enough to warrant a registered version. In the time it took
- him to translate 17 spells, I added 16 new spells, meaning it will never be
- finished. Artur reports ML's descriptions as full of typographical,
- grammatical and translation errors.
-
- Added Artur's spell-descriptions T-Z (52 descriptions + his new bugfixed
- Polski.catalog into the game.
-
- December 5th, 2000:
- * Added code to play a special mod when casting a spell if there is one
- in the Sounds/CastingMod/ dir. Atm, the only spell with a CastingMod is
- Tribal Dance.
-
- * Added code to play a special sound sample when casting a spell if there
- is one in the Sounds/CastingSounds/ dir. Atm, the only spells with special
- casting sounds are Vox Celestes, Vox Angelica and Blonde.
-
-
- December 9th, 2000:
- I spent about 20 hours on IRC before and after the conference.
- We had 150+ people on the Amiga channel to hear Mick Tinker speak.
- Normally there are only 30-45 people on AmigaNet #Amiga.
- It was fun!
-
- December 10th, 2000:
- * Added Artur's T Polski spell descriptions.
- * Added SF's spell-corrected Magyar spell descriptions (A-Z)
-
- December 13th, 2000: aaaaahhhh Al Gore finally officially quit trying
- to steal the election.
-
- December 17th, 2000:
- Added Artur's Q-S Polski spell descriptions.
-
- Artur writes:----------------------------------------------------
- Having Chaos limited to 20 turns is
- something deathly cruel - I just "finished" playing a game with 2
- Combat trained Juju Zombies, with 2 Mana Batteries and I stood between
- these batteries, mounted with a God Touched Haunt. I killed my
- 6th-level opponent wizard, destroyed 5 generators (1 was a magical
- Real Generator) and only 3 poor creatures left to slaughter... when I
- reached 20th turn. You are wrecking my life this way and I am going to
- commit a suicide (in the way that won't let you effectively use a
- Raise Dead spell ...I don't know, maybe I'll jump into an aeroplane
- engine so you will get a gooey blob in place of your favourite
- translator).
- ------------------------------------------------------------------
-
-
- * Added Combat sucking sound for Mind Flayer.
- * Added FallingIntoPit.8svx for when you fall into a pit.
- * Added SpecialCombatShocker.8svx for special combat attacks by creatures
- with MAX_COMABAT (Shocker)
- * spot^up donated a really cool mod for use in the game!
- I haven't added it into the game yet.
-
- December 20th:
- * Game over man, game over! For player 1 dying.
-
- December 21st:
- * CastingTwirl.8svx and CastingUndeadTwirl.8svx for use when casting
- creatures. We still need to come up with a sound for inanimates.
- The sounds sound very cool!
-
- * REMOVED the code that auto-plays CastingSounds/spellname.
- I think it will work better to have the spells specially programmed to
- play the sounds.
-
- These sounds will only be used specifically by spells.
- I must still maintain a list of them! So that "HasCastingSound(id)" will
- still work! But I won't play them automatically!!!!! Just take out the
- auto-playing code! DONE.
-
-
- * Sent a complete update (with no music) of v3.05 to SAI, FD and Xav.
- SAI main executable was 395672.
- FD main executable was 378052.
- Xav main executable was 378048.
-
- Begin v3.06
- December 22, 2000:
- Music/ dir is currently 3.8 megs (3838908 bytes)
- The only good thing about being totally SICK of programming is that I
- finally took the time to go through the music files to get the next version
- of the game ready. I put in ALL the new songs, even the ones that still
- need some work done on them. I just don't feel like doing any complicated
- or tedious work on them right now. I'm sooooo sick of hearing the same 10
- songs over and over again. We need at least 50 different tunez.
-
- * Put in 13.5 megs of new ChaosThemeSongs (11-60)
- Music/ dir is now 17.5 megs (17551558 bytes)
-
- * We now have some spooky tunes, some beautiful guitar tunes, some
- heavy duty brain-thrashing, mind-melting tunes, some wonderous magical
- tunes and others. Amiga Rulez da Muzik Scene!
-
- EXTRA SPECIAL THANKS TO ALL THE MUSICIANS WHO CONTRIBUTED MUSIC!
- (Complete list in the docs)
-
- * We now have some VERY small mods that can work even in very low memory
- situations. 15k, 51k, 55k
-
- * We now have 4 VERY large mods (over 600K) that will only work on systems
- with 2 megs of chipram. If you don't have a LARGE contiguous hunk of
- chipram free then you will never hear these in the game.
- All 4 of these mods are of the "orchestral" variety so if you are tired
- of hearing a "hardcore 90's rave soundtrack" all the time then free up some
- chipram so you can hear these moving musical masterpieces.
-
- * I played a test game with the new music. It was me against 7 enemy
- wizards who were all in an alliance against me. For several turns I was
- not making any progress. I wasn't about to die, but I was nowhere near
- being able to kill 1 of the wizards. I noticed the computer guys were
- attacking really stupidly. This turned out to be because I forgot to turn
- on Ruthlessness. The new AI really does make a difference. After
- several turns of not accomplishing much, one of the wizards cast alliance
- on me! So we were all 1 big happy family! I was able to win on turn 45.
- The last wizard was cloaked with a reflector and mounted on an undead.
- This was no great problem. It just slowed me down by several turns.
-
- December 24th, 2000:
- Well I was hanging around not really feeling like doing much of anything
- when I suddenly thought up an idea for why the Ghost and other long sound
- samples sometimes freak out and crash the computer. I thought perhaps the
- WaitJCSound() routine's use of FindPort() could be disabling multitasking for
- long periods of time. So I looked up FindPort() on the developer CD to see
- if there were any warnings that it disables multitasking for long periods
- of time and... YIKERZ! I found something much worse! It has a warning
- that it does NOT disable multitasking AT ALL so that ANY and ALL uses of
- FindPort() must be surrounded with Forbid() and Permit() !!! So maybe this
- has been causing all those weird random audio problems?!???? I made the
- appropriate changes and played the Ghost sound 60 times under various CPU
- loads and it never messed up! If this was the problem it would totally
- explain:
- 1. The random nature of the bug.
- 2. The random mess ups of the JCsound, audio.device sound, and maybe even
- the subsongs!
- 3. The fact that the problem only seems to affect _long_ JCsound samples.
- A long sample means WaitJCSound() is calling FindPort() over and over and
- over again, waiting for it to end.
-
- I am very happy about finding this! Now we need to heavily test this to
- see if all audio problems are now fixed!
-
- * BUG: If for some reason you have no music files in the music/ dir, the
- game crashes. I always wondered why in the WORLD this happened!? Now I
- know it was because of the FindPort() outside of Forbid().
- NOW FIXED.
-
-
- December 29th, 2000:
- * Artur fixed the English Higher Devil and Lesser Devil spell descriptions.
- (There was a double "from").
-
- * I added the sentence "Hyperclone will not replicate your wizard." to the
- Hyperclone spell description. I also edited the first sentence.
- * I removed the sentence "The powerful magic used in
- this spell usually produces a horrific, mutated copy of your wizard as a
- side effect." from the Lich Lord spell description.
- * Zoltan complained about the Range Boost description so I fixed it up.
-
-
- December 31st, 2000:
- Joseph, Matt, Jason and J.J. played 3 different 4-player games of Chaos in
- 3 hours. They played with a bunch of scrolls. On his 1st turn Matt cast
- Orcs and stepped onto 2 scrolls. This caused 1 of his newly acquired
- spells to be accessible and the other 1 to go into position 100 where he
- would never be able to use it. They all agreed this was stupid and they
- want all scrolls and bonus spells to go to the top of the list from now on.
- I have now reprogrammed it so that all bonus spells ALWAYS go to the top of
- spell lists for both human and computer players. NOW FIXED.
-
- They also want a "keep spell selection hidden" mode.
-
- "Hidden Spell Selection"? Won't fit on the lores setup screen . :(
-
- There is no need to have this as an option. It can simply always be on.
-
- 1. Put up a screen when you end your turn and ask for the next player to
- press a button to continue.
- What should this screen be? A simple printed screen? Or a 640x512x16
- color IFF? Or a 320x512 HAM6 IFF? or ??? Or a 320x512 HAM6 anim?
-
- * BUG: JJ reports that growths assist in the control of artifacts.
- Only creatures are supposed to assist in the control of artifacts.
- NOW FIXED.
-
- * FLAW: JJ reports that Biohazard MeltScreen effect lasts toooo long.
- I have now reduced it from 100 iterations down to 70. NOW FIXED.
-
- January 1, 2001:
- * Added all the musician's names to ChaosDocs.texinfo.
-
- January 2, 2001:
- Added the following default combat sounds for creatures who do not have a
- defined combat sound:
- Swoosh
- SwooshUgh
- BigSwooshUgh
- BigSwooshUuugh! (15 combat hit against creature)
-
- SwooshThud (These are used for attacking inanimates)
- BigSwooshThud
-
- SwooshOnMetal (These are used for attacking Robot or Dalek)
- BigSwooshOnMetal
-
- BigSwoosh (All BigSwoosh sounds are used for combat>=12)
-
- All 9 of the above sound samples combined together = only 42k!
-
- BigSwooshUgh is used thusly:
- volume=64 for 14 combat
- volume=60 for 13 combat
- volume=56 for 12 combat
-
- SwooshUgh is used for any combat hit 6-11. Volume is always 52 for this one.
- 6-11 = SwooshUgh
-
- Swoosh
- v=28 for 0 combat
- v=32 for 1 combat
- v=36 for 2 combat
- v=40 for 3 combat
- v=44 for 4 combat
- v=48 for 5 combat
-
- samplespeed = 8363 for all above samples.
-
-
- For now attacking a growth will play either "Swoosh" or "BigSwoosh"
- with no ughs. When I find a suitable squishy sound I can change this to
- SwooshSquish and BigSwooshSquish.
-
- In order to implement the above sounds I had to change CellEffect() to take
- an extra paremeter for the volume. Then I had to spend a whole hour
- changing hundreds of occurrences of CellEffect() to have the extra
- parameter added. After I did this I once again got the dreaded >32768
- error on cast.c:
-
- SLINK WITH temp_smk.tmp
- Slink - Version 6.58
- Copyright (c) 1988-1995 SAS Institute, Inc. All Rights Reserved.
-
- Error 502: _sprintf symbol - Distance for Reloc16 > 32768
-
- First Reference in Unit cast.c at offset 00003a56 in file 'cast.o'
- To Unit sprintf.c at offset 00001690 in file 'LIB:scm.lib'
- Caused by line 1942 in file cast.c
-
- So I syphoned out all the Intelligent Tree casting code into a new
- IntelligentTreeCast.c file. Now it links ok.
-
- I just played a test game and Chaos mysteriously started generating
- infinite enforcer hits. After a few minutes of this I finally reset the
- machine. AFAIK this was caused by editing sound samples in OMSSP. Editing
- samples in OMSSP sometimes crashes the machine directly.
-
- * BUG: I've been noticing the computer controlled creatures are playing
- really stupidly even though I have Ruthlessness turned on. When I
- created the gadget for Ruthlessness I forgot to connect the Ruthlessness
- variable to it! So Ruthlessness mode has not actually been working for the
- last week. NOW FIXED.
-
- * BUG: Mod.ChaosTheme18 starts out ok but then it starts playing too slowly
- after a while. I have now converted it to MED MMD1 so now it works
- correctly. NOW FIXED.
-
-
- January 5th, 2001:
- * BUG: This line of code was in the Growth() routine and was executed
- outside of any semaphore lock on the board! A big no no!
- ip->char_stat = InitialData(ip->id);
- NOW FIXED.
-
- * FLAW: The last generator that generated something is still highlighted
- all throughout the Growth() phase. NOW FIXED.
-
- * FLAW: The last Agent/generator that casted/generated something still has
- text left over at the bottom of the screen during the Growth() phase.
- NOW FIXED.
-
- * NEW GFX FEATURE: I have now added code to keep animations of Green Ooze,
- Orange Jellies and Earthquakes synchronized so they look much better now.
- This code executes at the end of the Growth() function.
- Tested and works perfectly.
-
- * I Played against 7 enemy wizards who were all in an alliance against me.
- I won on turn 33. Midway through the game one of them cast Alliance on
- me. One of my allied wizards was cloaked and reflected and invulnerable
- and another of them was invulnerable and cloaked.
-
- I was playing a game where I kept moving my snake and nothing was
- uncovered. I then began to wonder how far out my snake was really feeling.
- So I decided I needed an "f" keypress.
-
- * 3 NEW KEYPRESSES:
- f for "feeling range"
- h for "hearing range"
- o for "olfactory range" (o = olfactory = smell)
-
- * FLAW: Heal and Vox spells erroneously print a promotion message.
- NOW FIXED.
-
- * Included FD's reflowed and corrected Français spell descriptions.
-
- * Reflowed all Magyar Spell Descriptions.
-
- * BUG: Computer wizard had 3.5 movement points but moved 3.8 squares to
- mount his horse! NOW FIXED.
-
- * BUG: Grizzly Bear had 2.5 movement points but he moved 2.8 squares to
- attack me! NOW FIXED.
-
- * PROBLEM: the casting beam sound is too loud compared to the sound of the
- casting twirl effect. This is because all algorythmically generated sfx
- use a perfectly oscillating square wave. So I have now reduced the volume
- of algorythmic sounds from 40 down to 32 and now everything sounds better.
- NOW FIXED.
-
- * I drew a new Dark Citadel graphic.
-
- * Sent Chaos v3.06 to Xav, FD and SAI on Jan 9, 2001.
- Executable filesize = 381432
-
- January 10th, 2001:
- * The color cycling of Special Combat on the info panel has always been
- unsatisfactory and crappy looking. Now I see why I put off fixing this for
- so long. It just took me 2 hours to get it all working correctly.
- NOW FIXED.
-
- * Mod.ChaosTheme60 was playing much to slowly so I converted it to MED
- format. DONE.
-
- * Played a test game using the default settings. I won on turn 23.
- I could have won on turn 22 but I made a small tactical mistake.
-
- January 11th, 2001:
- * BUG: When creatures are promoted they lose their exophagy and scavenging
- powerups! NOW FIXED.
-
- * I finally added a (lame) chainsaw sound for the chainsaw. We can now
- easily add new "weapon spells" that cause a certain sound to be played
- during combat. Someone needs to take a chainsaw out and cut some wood
- with it and record it. Especially the sound of it getting jammed up in
- the wood.
-
- * Must modify promotion() to keep the new .WeaponSoundStat intact. DONE.
-
- * Being attacked with a chainsaw is a very painful experience.
-
- * I went crazy and played 3 complete test games just so I could hear
- creatures scream while I chainsawed them. MUAHAHAHAHAHAHA!!!
-
- January 13th, 2001:
- I started getting sick. I drank tons of orange juice and ate a large bowl
- of Raisin Bran cereal. My brain feels ok now but my throat is still
- bothering me :(
-
- * PARAGRAPH BREAKS are now supported in the spell descriptions! Now we
- don't have to have long run-on super-huge spell descriptions all in 1
- giant paragraph. I tested this by editing the descriptions for Points,
- Devastation, Alliance and Standard Wall.
- It works great and looks much nicer, especially
- on Devastation! I suppose someone should go over all the spell
- descriptions and see if they need paragraph breaks and put them in.
- I'm really unclear as to where to place paragraph breaks. It often seems
- like we need one after almost every sentence.
-
- Note to FD: I hope this doesn't break any Arexx->AmigaGuide document
- scripts or anything.
-
- January 14th, 2001: Robin writes
- > i
- > have an idea for a new spell: what about a 'brain shield' which protects the
- > wizard against 'brain drain' and perhaps even the Mindflayer? it's so hard
- > having an enemy with Double and Brain Drain going around and stupidify
- > wizards to death in a single turn from a rather great distance and without
- > any chance of blocking.
-
- There is a chance of blocking, Brain Drain requires line of sight so you
- just have to move 1 of your creatures between you and the doubled wizard.
- Or you can cast walls or trees to protect yourself. Or you can climb into
- a Magic Castle or Dark Citadel or Shadow City or Magic Wood tree, or you
- can simply hop on a common horse or unicorn or you can use the mount spell
- and mount anything at all.
-
- So as you can see, there are a few ways to block. :)
-
-
- January 15, 2001:
- * Robin _finally_ sent in some Deutsch spell-descriptions (A-E).
- * I sent a COMPLETE English spells archive to Robin and Wolverine today.
- * I watched 2 movies today: "Pitch Black" and "The Cell".
-
- January 16, 2001:
- * I implemented help screens. They are attached to the help key.
- These are mainly for newbie neophytes on their very first game. But the
- "Help/Show me all the keys" option will be useful to everyone all the
- time.
-
- If you press help/What do I do now!?!? then it is context sensitive
- depending on what phase of the game you are in (spell selection, spell
- casting or movement).
-
- * Included Xav's bugfixed new Generator gfx into the game.
-
- * FIXED Golden Dragon description: It said "vain" instead of "vein".
-
- * CHANGED: the highlight sprite from #3 to #2 and adjusted the asm code
- in the vain hope that it will now work in dblpal.
-
- * MYSTERIOUS BUG: Every once in a while, after I've been playing the game
- for a long time and I am running lots of other programs, I will go to
- save the game and the save game screen will freak out and cause lots of
- enforcer hits and not print the word "SAVE" along the side of the screen.
- This has happened several times over the last several months. I finally
- figured out what it was! The intro had this line of code:
-
- IF (UnionFont70) CloseFont(UnionFont70);
-
- But then it never set UnionFont70=NULL; !
-
- So on the save game screen when it did this:
- IF (!UnionFont70) UnionFont70=OpenDiskFont(&ifs1);
-
- ... use the UnionFont70 here and wreak havoc by using a font that has
- already been closed.
-
- The reason the bug only happened randomly is that, normally if you close
- a font it is still there in memory and your pointer will still work, unless
- you get low on memory or manually force a flush of all unused resources
- such as typing "avail flush" in the shell. NOW FIXED.
-
- * NOTE TO BETATESTERS: I used the following secret technique to help me
- find the above bug, it should prove useful in the future when testing this
- software or other software by other people:
-
- 1. Lets say you have a mysterious random bug.
- 2. Do the thing that triggers the bug as the first thing you do when you
- load the program.
- 3. When you see that the bug doesn't happen, go to the shell and type
- avail flush.
- 4. Go do the thing that triggers the bug. If the bug now happens then
- you'll know what the problem is! Using a pointer to a freed resource!
-
-
- January 17, 2001:
- * Included Xav's new Wood Elf and Dread Elf into the game.
-
- * I replaced wizard graphic #3 with Xav's Club Juggler, at least until we
- go to 32x32 256 color tiles.
-
- Joe's friend David moved in.
-
-
- January 21, 2001: Robin reports some flaws in the spell descriptions:
- * Meddle (change than->the),
-
- > 3. exorcise - following situation: there is NO undead
- > creature on the board. there is NO Browser or Omnipotent on the board. I
- > resurrect a Green Dragon, in the same turn the computer exorcises it. how
- > can that be?! is your AI that good that the computer chooses spells even
- > because of possibilities? what had he done if I had chosen another spell?
-
- Send me the autosave where this happened. (of the turn right after and
- right _before_ it happened).
-
- What you are describing is almost impossible. Which means it is finitely
- probable and in fact _will_ occur someday, sometime, somehow.
-
- 1. There was probably an undead somewhere when he chose the spell (perhaps
- it got killed by something else before he got to cast it though).
-
- 2. If there really was NO UNDEAD anywhere on the board when he chose his
- spell then its probably a bug.
-
- 3. But maybe what happened was that he was totally surrounded by stuff so
- he could cast no creatures. Now suppose his spell list was ALL CREATURES
- (which he cannot cast because he is surrounded) + he has an Exorcise spell.
- In such a case, he might choose Exorcise.
-
- 4. Or maybe he was under the influence of that spell that prevents you from
- casting creatures. And suppose he only had 10 spells left on his list
- and he had 9 creatures + 1 Exorcise. He would then HAVE to choose
- Exorcise because it would be the only spell available to him on that
- turn.
-
- 5. Or maybe he was surrounded by friendly creatures and friendly trees so
- that he couldn't cast any of his creatures. Now lets say he has 2 Brain
- Drains (your fave spell :), 2 Lightning Bolts, 2 FireBalls, 2 Ice
- Breaths, 2 Magic Attacks and 2 Exorcise spells.
- In this situation he _can't_ cast his creatures and he doesn't _want_ to
- cast any of his magical attack spells because the only legal targets
- are his own creatures. So he chooses Exorcise.
-
- 6. There was probably an undead creature or undead wizard somewhere on the
- board that you just forgot about. It was probably created by Raise Dead
- or Lich. So the most likely scenario goes like this:
- 1. Your enemy wizard sees an enemy undead Harpy somewhere that he is
- going to Exorcise so he chooses Exorcise.
- 2. You suddenly cast Raise Dead on a ferocious Green Dragon.
- 3. This scares the computer player so badly that he has to reevaluate
- what he is going to cast his Exorcise on.
- 5. After thinking long and hard about this (.001 milliseconds) he
- decides that your new Undead Green Dragon of Death is far more
- dangerous than the undead Harpy.
- So he sends your dragon straight to hell.
-
- BTW: when I play games against JJ in real life, he is _always_ wizard #8
- and he ALWAYS nukes my dragons/demons/etc with a
- Justice/DarkPower/Vengeance/Exorcise/etc. _immediately_ on the same turn I
- cast it. He _always_ watches what spell I choose. The only way I can get
- away with casting a powerful creature is to wait for the phone to ring or
- something then cast while he's away.
-
-
- * Did a test: Change languages then Avail Flush then access every screen in
- the game to see if it still works. Everything seems to work perfectly.
-
- January 22, 2001:
- * Included Xav's new Dire Wolf and Arctic Wolf into the game. They are
- very blurry but oh well... I'll be glad when we make a hires version.
- * Included Xav's new Gray Elf. He's a bit tall for an Elf but oh well..
-
- * Chaos needs a website! But there is no point in having a website without
- screenshots! But everyone on Team Chaos says the same thing "I don't know
- how to make a screenshot of Chaos". Well I can't wait any longer for
- someone to figure this stuff out sooo....
-
- * Spent some hours investigating all the screengrabbers on Aminet.
- NONE of them claimed to work with a multiscreen view so I didn't dl any
- of them. The one grabber that I TRIED to download, I couldn't because my
- ISP sux SO BADLY that it would dl at 60 cps for 15 mins and then just
- abort. :(
-
- ScreenGrabbers: "" = It doesn't say it handles multiscreen views.
- gfx/misc/MasterGrabber.lha It doesn't say it handles mulitscreens and it
- requires bgui.library. Did not dl it.
- gfx/misc/Screen2IFF It doesn't say it handles multiscreens so I didn't dl
- it. Hey!!! Its made by Frédéric Delacroix!!!!!! Note to author: you
- forgot to add multiscreen support :)
- gfx/misc/ScreenGrab.lha Doesn't say it handles multiscreens.
- ScreenJaeger: ""
- ScreenMugShot: "" but can also grab windows.
- SGXS: ""
- ShScrIFF: ""
- QuickGrab1_1.lha ""
- ScreenGrab.lha ""
- Slurp10.lha "" uses joystick button
-
- gfx/show/AdEd.lha ""
-
- util/misc/SGrabber.lha ""
- util/misc/wgrab.lha ""
- util/misc/ShootTheScreen.lha makes a series of screenshots.
- urann@polbox.com only 5 weeks old.
-
- util/wb/sgrab.lha 0 weeks old.
-
- * DL'ed UAE + Kick31.rom + an 8 meg hardfile and installed them onto my
- brother's 650Mhz Athlon 128 megs + GeForce gfx card 32 megs
- I then put Chaos 3.0 onto it.
- 1. It cruises at about the speed of a 14 Mhz 020 some of the time.
- 2. A few times each turn it just STOPPED for a couple of seconds.
- 3. Sometimes it stops for 10 or 20 or 30 seconds. 1 time it stopped for
- 45 full seconds!!! What is it doing??!?
- 4. The mouse pointer moves much more sluggishly and jerkily than an A500.
- 5. The mods of v3.0 played mostly ok. There was a little "fuzziness" and
- "distortion" but overall the mods played ok EXCEPT for mod.ChaosTheme1
- which always went TOTALLY BERZERK!
- 6. I said it "cruises" at about 14Mhz 020 speed. Many times it randomly
- drops into slow-motion mode. Like when you click on a creature,
- sometimes you'll move it before it makes the "beep" sound.
- 7. The sprite lags behind the creatures a lot. This is slower than A500
- with 7Mhz 68000.
- 8. The autosaving is unbearably slooooooow.....
- 9. The soundsamples sometimes played ok, other times they fuzzed out,
- other times they went TOTALLY BERZERK.
- 10. The screen scrolling was MUCH slower than a 7Mhz 68000 Amiga 500!
- The scrolling looks horrible on UAE!
- 11. All in all it wasn't any fun due to how looooong it took the computer
- to do its turn.
- 12. I made some screenshots and worked out how to convert them from
- superhuge .bmp format to supersmall .jpg format using the software on
- his computer.
- 13. Aaaargh! The New Game and Quit Game requesters are HORRENDOUSLY
- slower than a naked A500!
-
-
- January 23, 2001:
- * Xav made a new super-cool 42-frame animation of a worm. This crashes the
- game. Its all because I forgot to add in the code to go from the first
- row down to the 2nd row and etc. NOW FIXED.
-
- * Sent Xav a new updated executable v3.07 + sounds/chainsaw
- + gfx/spells/Wizard 3 + catalogs/#? + help/#?
- Executable filesize = 385464.
-
- January 24, 2001: Spent all day sending Robin+Artur updated versions.
-
- January 25, 2001: Included Xav's hilarious new Amphisbaena animation!
-
- * STUPID: When playing with artifacts, computer wizards frequently cast
- Alliance on artifacts belonging to NOBODY. NOW FIXED.
-
- * STUPID: Sometimes computer players cast alliance onto people who are
- already on their team! NOW FIXED.
-
- * STUPID: When playing a game 1 human vs 7 enemy wizards who are all on the
- same team against the human, eventually 1 of the wizards will cast
- Alliance onto the human then EVERYBODY is on the same team! NOW FIXED.
-
- * STUPID: Computer players refuse to ever cast a double or triple alliance
- spell. NOW FIXED.
-
- * STUPID: Sega gave up on the Dreamcast :( UNFIXABLE.
-
- January 26th, 2001:
- * Hacked and slashed Attila the Hun's labyrinth generation algorithm into
- Chaos and tested it about 40 times. It worked perfectly every time!
- Only playtesting will reveal if this new option will be any fun or not.
- Hopefully it will at least be an interesting diversion to try out from time
- to time.
-
- * Added code to properly put together Power Walls.
-
- What should this new option be called? I was originally going to call it
- Maze Wars but it isn't exactly a maze. More of a dungeon.
- Here are some ideas for naming this option:
- Maze Wars
- Maze Fight
- Dungeon
- Dungeon Wars
- Dungeon Fight
- ???
-
- * Added code for secondary and tertiary constructs.
-
-
- Ok, now that there is Dungeon Wars mode I figure I should play a test game
- to see if its any fun. :)
-
- I am playing with 1 enemy wizard, 16 generators, no scrolls, no artifacts,
- Texas Trash'em, Ruthlessness, Dungeon Wars, 99 spells, no turn limit.
- Exploration mode is off.
-
- The generated dungeon was composed of Shadow Wood trees. This means that
- as the game progressed the independents were fairly proficient at mowing
- them all down since Shadow Woods only have 22 life points.
-
-
- Turn 1: Aaaaugh! I'm in the middle of the board! I immediately cast my
- Magic Carpet and hopped on and flew toward the safest corner. I took heavy
- damage before I could get to a safe spot from all the generated
- long-distance flying creatures!
-
- Some turns later...
- The enemy wizard has cast a Shambling Mound. It kills a creature almost
- every turn. It heals about 13 points per turn (+9 for scavenging and +4
- during its attack with exophagy). But it is taking about 22 points of
- incoming damage each turn. His Shambling Mound kept advancing toward the
- front lines, killing things and taking tons of damage. It was getting
- pretty weak but then he turned it around and started heading away from the
- hittable area of all the flying creatures. This allowed him to heal up to
- maximum within a few turns. His Shambling Mound completely devoured
- several corpses. It finally died after a Blue Dragon was generated nearby,
- After he lost his Shambling Mound, he lost all his other creatures and his
- wizard. :(
-
- Oh great! Now everything that had been fighting the computer wizard is
- charging down towards me! Auugh! Oh well... no problem. My Grey Elf
- Batallion is right behind a solid wall of Shadow Wood trees. My 3 harpies
- weaken everything down then my 3 Grey Elves kill them. So I'm 100% safe.
-
-
- Turn 22: I've only killed 3 of the 16 generators. The computer wizard died
- a long long time ago. My wizard is in no danger of being killed, I have a
- nice safe corner that I control. However it will be a long and slow
- process to kill another generator because when I killed the last generator
- all the flying creatures swarmed in on me and killed my Floating Eye and my
- Speed Harpy (my 2 best creatures). The only reason I'm doing as well as I
- am is that I got a triple spell several turns ago and cast Triple Magic
- Sword, Wraith, Zombie, Harpy, Grey Elf.
-
- Now for my bonus spell on Turn 22 I can choose 1 of the following:
- Elf Boots, Skeleton, Recover Boost or Mass Morph! I'm choosing Mass Morph!
- Wahoo!!!!! Now I can win the game quickly and get back to coding new
- stuff!
-
- On turn 35 I had killed all the generators except for 5 which were blocked.
- But I didn't win because there are a bazillion pieces of independent
- Magic Woods laying around from the Mass Morph.
-
- I guess I should change the victory conditions so that enemy inanimate
- objects do not need to be killed to win. Is that ok?
- What is your opinion of this?
-
-
- * Added DungeonWars to the savegamefile io.c and to the prefs.c
-
- * Added the Dungeon Wars gadget to the setupscreen 2.
-
-
- January 28th, 2001:
- * Made 126 tiles for the upcoming Tower.
- * Made 72 ID's for the upcoming Tower.
-
- January 31st, 2001:
- * BUG: When a creature with a Telescope is promoted, it loses its Telescope.
- NOW FIXED.
- * BUG: Any creature which is given any enhanced sight, smell, hearing or
- feeling will lose those enhancements when promoted. NOW FIXED.
-
- * Edited the website a bunch.
-
- Feb 1st, 2001: FD Writes:
- > BTW, I think Chaos does not correctly handle saved games with a space in
- > the name. Probably quotes missing in the lha command line.
- NOW FIXED.
-
- * Included Wolverine's new Magyar.catalog.
-
- The mac can't lha things or unlha them correctly so here is the zip
- command: zip -R DestinationFile.zip *
-
- I lha'ed and Zip'ed the Chaos website. The lha archive was smaller.
-
-
- Bad News:
-
- My brother went to the hospital so I started to copy the latest
- version of the game over to the PC using floppies as you suggested.
- The game fit onto 6 720k floppies (no music). Nice and easy you say?
- Oh no! The stupid damn PC floppy drive kept randomly screwing up!!!
- Sometimes it would copy the file, sometimes it wouldn't. I only got
- files 2,3 & 4 to copy. After hours of trying I gave up and decided to
- email the files to myself. It takes 10 mins to email 1 file. Just as
- it was almost finished, my brother came home! 3.5 hours wasted trying to
- copy the game onto the PC! Arrrgh!
-
- So now I must wait until Friday when he will allegedly go to work all day.
- DL the files from my yahoo mail (5 mins). Join them (5 mins). Unlha them
- on UAE, (1 hour). Then I can load all the levels and make the screenshots.
-
- Good News: My brother is cured. But he is still recovering.
-
-
- Feb 2, 2001:
- -------------------------- Setup Problems -----------------------------
- * FLAW: Every time you start a game the 1st dungeon is the same as the
- 1st dungeon of the last time you loaded the game. 2nd is the same as the
- 2nd, etc. rnd_seek is now loaded from IntuitionBase->Micros so this is
- NOW FIXED.
-
- * FLAW: If you play Dungeon Wars mode with 99 generators, the board is
- pretty much solid on turn 1 with _many_ generators blocked off.
- NOW FIXED.
-
- * BUG: If you start a game with 99 Generators and 99 scrolls and 99 artifacts
- The game gets stuck in an infinite loop. NOW FIXED.
-
- * Allow generators to be placed on empty squares OR in place of inanimate
- objects OR on top of dead bodies OR on top of scrolls. DONE.
-
- * Allow scrolls to be placed under generators, under the dungeon pieces or
- in empty spaces or on top of dead bodies. DONE.
-
- * Allow artifacts to be placed on top of scrolls, on top of dead bodies or
- into empty squares. DONE.
-
- * BUG: If you play with Dungeon Wars + 99 generators + 99 artifacts
- then the game still gets stuck in an infinite loop because there isn't
- enough room to place all the artifacts. NOW FIXED.
- TESTED and works perfectly!
- ---------------------- END Setup Problems --------------------------
-
-
- I just played a test game of 99 generators + 99 scrolls + 99 artifacts
- + 1 enemy wizard + Ruthlessness + Texas Trash'em + Dunegon Wars.
- It took me quite a few hours to finally win.
- After a while I got an Aesculapius and started pumping up all my guys.
- Then I started killing tons of generators and walls. On a typical turn
- I would get to choose 3 spells from a list of several.
- I got the Mass Morph spell offered to me on my bonus spell selection
- screen MANY MANY times! It was offered to me twice in 1 selection 1
- time! It was offered to me around a dozen times during the game.
- This is very weird. It never once offered me what I really needed:
- a Fly spell or an Archery spell or a Wizard Wings spell or a Recover Boost
- or a Lich.
-
- * Problem: I can't stand the way Standard Walls look on the Dungeon Wars
- maps. The color between the bricks looks very bad IMHO.
- It should either be a _very_ dark red or black. NOW FIXED.
- * Problem: I can't stand the way Weak Walls look either.
- The color between the bricks should be either a _very_ dark yellow
- or black. NOW FIXED.
- * Problem: The Hwall and Vwall pieces of Power Walls don't look so
- good when they are the last piece on the end and not connected to
- anything. NOW FIXED.
-
- Aaaaah now the gfx seem much more appealing to me. :)
-
- * PROBLEM: Lha 2.1 is buggy and crashes the machine, which is why I use
- lha 1.35. However, users with lha 2.1 seem to have an lhaopts file
- which uses parameters that don't work on lha 1.35. This causes
- game saving and loading to not work. So I have now hacked lha 1.35 to
- NOT try to read the lhaopts file. NOW FIXED.
-
-
- Feb. 3, 2001:
- * The translation of "Magic Resistance" in the Magyar.catalog is
- "Mágia ellenállóképesség" which is wayyy tooooo long to fit on the
- info panel. I am shortening it down to Mágia Ellenállás.
-
- * Manõverezhetõség is also toooo long. I am shortening it to
- Manõver.
-
- * Generated the IP1 screen for Magyar finally.
-
- * Put Ruthlessness and Dungeon Wars into the ChaosDocs.texinfo then
- sent it to FD.
-
- Feb. 4, 2001:
- * Made the first couple of screenshots of Chaos.
-
-
- Feb. 5, 2001:
- * Spent all day wandering around the net on DSL + writing Emails + reading
- newsgroups.
-
- * I DL'ed and played 3 games from Aminet. 1 was somewhat interesting (very
- creative). The other 2 pretty much sucked. :(
-
- * Included Robin's new OPQ Deutsch descriptions.
-
- Feb. 6, 2001:
- * NEW GFX: Included Xav's great new Optometron of Omniscience and Exit gfx!
-
- * I updated HelpWanted.html, installation.html, requirements.html,
- legal.html, features.html, chaos.html and index.html, HelpWanted.html
- a bit.
-
- * Robin and Xav and Artur are all reporting serious Email service problems
- and disruption.
-
- Feb. 7, 2001:
- * I loaded up some 1990 and 1991 commerical platform games to study the
- graphical fx. I learned some nice stuff. :)
-
- Feb. 8, 2001:
- * STUPID: If you shoot your allied wizard repeatedly he won't cast his
- Separation spell if he has one. NOW FIXED.
-
- Above fix meant I had to change the gamesave format so I went
- ahead and added in the the 2 WORDs for the 5 leather armors and 5
- chainmails spells + added in some unused LONGs while I was at it. DONE.
-
- Make a new LONG in the Wizards[] struct that contains the value of the
- desire to cast Separation. .SeparationDesire. DONE.
- Modify the ranged combat routine to add points to this LONG every time an
- ally shoots one of his creatures with normal combat. Subtract off healing
- combat. DONE.
- Any positive hit on a wizard or a wizard's mount sets it to
- max(.SeprationDesire,100); DONE.
- ALL DONE.
-
- * You can shoot an allied wizard who has a reflector and it won't make him
- mad.
- * You can shoot an allied wizard or any allied creation with 0 or negative
- combat and it won't make him mad. In fact, shooting your allies with
- healing combat will make them like you more.
- * Tested and works perfectly!
-
- END OF V3.1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Made a copy of everything into sc:Chaos_3.2/
-
- BEGIN V3.2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Feb. 9, 2001:
- * Implemented Towers.
-
- Tower*
- Lo, I beheld a great vision, as it were, of a Tower. And the Tower was
- small. And the hand of God came down from Heaven and the essence of man
- was placed therein so that all who dwelled in the Tower would work together
- to achieve a mighty greatness.
-
- Inscribed upon the face of the Tower were these words:
- "He who entereth shall not leaveth and no wizard shall ever enter."
-
- Many humble peasants saw the tower and spake amongst themselves, "We are
- weak but the Tower is strong, let us enter into it that we might strike
- great fear into the hearts of our enemies".
-
- And it came to pass that the Tower gained the strength of strong men,
- the wisdom of wise men, the constitution of hearty men, and the skill
- of the greatest archer.
-
- The limit of its power is not yet known.
-
-
- Tower*
- The mystical powers of the Magic Tower allow it to absorb the essence of
- any creature who enters it.
- The Tower starts out very short but as it becomes more powerful it grows in
- size. Any creature entering a tower adds all of its primary statistcs to
- the statistics of the Tower. Once a creature enters a tower it can never
- leave because its essence becomes one with the tower in a permanent and
- unbreakable bond. Wizards cannot enter towers.
-
-
- Height = Life that way it can grow and shrink according to how
- damaged it is.
-
- Blue flag = archery. Red flag = attacks undead.
-
- Red doorway indicates scavenging.
-
- For 9 levels of height there will be 9 * 2 = 18 frames of
- animation for a tower with 1 flag.
-
- 18 frames for a tower with Red Flag.
-
- 18 more frames for a tower with Blue Flag.
-
- 18 more frames for a tower with both flags.
-
- 18 more frames for a tower with scavenging (red doorway) + Red flag.
-
- 18 more frames for a tower with scavenging and the Blue flag
-
- 18 more frames for a tower with scavenging and both flags.
-
- 9 single frames for a plain tower with no flags and no animation.
-
- 9 single frames for a plain tower with no flags but with scavenging.
-
- 126 frames for 1 object!!! 126 frames if I use 9 height levels of 7 each!
-
-
- 9 Height levels corresponding to 7 points of life each.
- 0-7 = lowest level. (no trunk)
- 8-14 = 1 pixel of height.
- 15-21 = 2 pixels of height.
- 22-28 = 3 pixels of height.
- 29-35 = 4 pixels of height. (starting height).
- 36-42 = 5 pixels of height.
- 43-49 = 6 pixels of height.
- 50-56 = 7 pixels of height.
- 57-63 = 8 pixels of height.
-
-
- TowerLevel1ID "Tower Level 1"
- TowerLevel2ID
- TowerLevel3ID
- TowerLevel4ID
- TowerLevel5ID "Tower Level 5" (The real beginning one)
- TowerLevel6ID
- TowerLevel7ID
- TowerLevel8ID
- TowerLevel9ID
-
- TowerLevel1UID "Tower Level 1 U"
- TowerLevel2UID
- TowerLevel3UID
- TowerLevel4UID
- TowerLevel5UID
- TowerLevel6UID
- TowerLevel7UID
- TowerLevel8UID
- TowerLevel9UID
-
- TowerLevel1SID "Tower Level 1 S"
- TowerLevel2SID
- TowerLevel3SID
- TowerLevel4SID
- TowerLevel5SID
- TowerLevel6SID
- TowerLevel7SID
- TowerLevel8SID
- TowerLevel9SID
-
- TowerLevel1AID "Tower Level 1 A"
- TowerLevel2AID
- TowerLevel3AID
- TowerLevel4AID
- TowerLevel5AID
- TowerLevel6AID
- TowerLevel7AID
- TowerLevel8AID
- TowerLevel9AID
-
- TowerLevel1UAID "Tower Level 1 UA"
- TowerLevel2UAID
- TowerLevel3UAID
- TowerLevel4UAID
- TowerLevel5UAID
- TowerLevel6UAID
- TowerLevel7UAID
- TowerLevel8UAID
- TowerLevel9UAID
-
- TowerLevel1SAID "Tower Level 1 SA"
- TowerLevel2SAID
- TowerLevel3SAID
- TowerLevel4SAID
- TowerLevel5SAID
- TowerLevel6SAID
- TowerLevel7SAID
- TowerLevel8SAID
- TowerLevel9SAID
-
- TowerLevel1USID "Tower Level 1 US"
- TowerLevel2USID
- TowerLevel3USID
- TowerLevel4USID
- TowerLevel5USID
- TowerLevel6USID
- TowerLevel7USID
- TowerLevel8USID
- TowerLevel9USID
-
- TowerLevel1USAID "Tower Level 1 USA"
- TowerLevel2USAID
- TowerLevel3USAID
- TowerLevel4USAID
- TowerLevel5USAID
- TowerLevel6USAID
- TowerLevel7USAID
- TowerLevel8USAID
- TowerLevel9USAID
-
-
-
- 1. Save out 72 different gfx files, correctly arranged and with the correct
- name. DONE.
- 2. Save out 72 different spell files. Correctly set up for the new tower
- object. DONE.
- 3. Save out 72 different spell description files? I dunno. I think we
- only need the description for Tower Level 5. You can't ever read any of
- the others. Hopefully that will work. 1 description saved. DONE.
- 4. Write code to check all objects on board if they are a tower and set
- them to the correct id based on their life value. DONE.
- 5. Above routine is _always_ called at the end of casting any spell, at the
- end of the combat routine and the end of the ranged combat routine.
- DONE.
- 6. Figure out how to generally handle "damagable" objects!
- There is no way to "generally" handle them (that I can think of)
- because the anims might be changed based on movement points or
- life or any other stat.
- 7. Put in the code to the movement routines ala pit and shadow wood and
- bolter.
- A. Any move into a tower by a creature (tower and creature are owned by
- the same person) results in the creature entering the tower ala pit.
- DONE.
- B. An engaged person can sneakily escape into a Tower! DONE.
- C. Any move into a tower by a creature (tower and creature are NOT owned
- by the same person is going to be handled JUST LIKE USUAL, its just a
- plain normal attack. DONE.
- D. If you click on a Tower, handle it just like a Shadow Wood. DONE.
- 8. We could have a special little sound to play for when a creature enters
- a tower but I have no idea what it should be. Any ideas?
-
- * Played a couple of test games with Towers. Everything seems to work ok.
-
- ====================== END TOWERS UPGRADE ===============================
-
- Feb. 10, 2001:
- * STUPID: Computer wizards sometimes cast Cartagraphy, Telescope,
- Seismology and Alternography when the game is not even in exploration mode!
- NOW FIXED.
-
- On 07-Feb-01, Sean A. Irvine wrote:
- > I had a quick game of Chaos last night. The only stupid thing I
- > noticed was when my own Mullac de Irvine decided to cast an
- > earthquake right next to my wizard. Naturally, I gave the Mullac
- > a war[n/m]ing blast from my dragon and he didn't do it again.
-
- Hehehe.
-
- Ok I have now adjusted the AI so that computer-controlled spellcasters will
- not cast Earthquakes adjacent to friendly wizards. Unless the friendly
- wizard has an Earthquake shield, then they might cast it there anyway.
- NOW FIXED.
-
- * DITTO for Floods and Fires.
-
- * Included Robin's new Power Wall description into the game.
-
- * Activated the Chaos website and uploaded all the files. It works ok but
- all the fonts seem too small.
-
- * BUG: An allied computer wizard might still cast Earthquake adjacent to
- one of his allied wizards if he is meditating in an enemy meditation.
- The trouble is that SameTeam() gets confused when Wizards are inside of
- enemy objects. NOW FIXED.
-
- Feb. 11, 2001:
- * ADDED: Special Combat now plays the creature's special attack sound from
- Sounds/Combat/ just like regular combat does. This was needed for Wasp
- Nest and Grim Reaper.
-
- * NEW CREATURE: Grim Reaper. Stats, animation, sound and description
- designed by Robin! I put this one in first since he did the whole
- package himself which freed my mind to concentrate on coding.
- I tested the new creature and he seems to work ok. He's very tricky to
- use, especially in Dungeon Wars mode.
-
- * Added sound effects for Wasp Nest and Grim Reaper to the Sounds/Combat/
- dir.
-
- * BUG: There was no WaitJCsound() in the CellEffectList() routine so the
- long sound effects of 1 special combat thing could overlap into the
- special combat of another thing. NOW FIXED.
-
- * 2 new wizard names: When you start the game there are now 2 new
- possibilities for the random wizard names:
- Robin Hood in honor of Robin Schmidt.
- King Artur in honor of Artur Chlebek.
-
- * Updated contacts.html some more.
-
- Feb. 12, 2001:
-
- * 3 NEW SPELLS: Ditzy Blonde, Winged Elf Boots and Anger.
-
- -----------------------------------------------------------------
- Ditzy Blonde*
- Range 5 LOS.
- ComputerAssist: FLAG_SMART
- IsStupid() don't cast on 3 or lower intelligence.
- -----------------------------------------------------------
-
- Winged Elf Boots*
- Winged Elf Boots are manufactured with genuine Pegasus Feathers which bestow
- the ability of flight upon the wearer as well as increasing movement and
- maneuverability.
- CAST_FREE
-
- I couldn't decide whether or not:
- A: To have this spell grant +1 movement points or not.
- B: To allow this spell to be cast on _anyone_ or only the wizard.
-
- -------------------------------------------------
- * A new spell: Anger
-
- Anger (Probability -40, BONUS spell, CAST_FREE)
-
- Anger is a powerful spell which will make all your creatures
- very angry at their opponents. As a result their combat ability
- will be raised by 1 point.
- -------------------------------------------------
-
- * BUG: The Ditzy Blonde sound sample for some UNKNOWN reason had the default
- volume set to 0! Arrrgh! So it would play silently! NOW FIXED.
-
- Any updates I send out will need a new Ditzy Blonde casting sound!
-
-
- Feb. 13, 2001:
- * 2 NEW SPELLS: Worm and Blood Worm.
-
- Feb. 14, 2001:
- * Included Xav's damagable Weak Wall, Strong Wall and Standard Wall.
- I implemented the proramming for them and then played a test game.
- WORKS GREAT!
-
- Feb. 15, 2001:
- * Included Xav's damagable Rock. I smoothed many (all?) of the
- Rock pieces.
-
- Feb. 16, 2001:
- * EDITED: The Amphisbaena to have the word balloon over his head.
-
- * I DREW: 8 additional damaged variations of Power Wall Center, Power Wall
- Vertical and Power Wall Horizontal.
-
- Feb. 17, 2001:
- * INCLUDED: The new damaged Power Wall variations into the game.
-
- Change CWallID -> PowerWallCenter9ID
- Change VWallID -> PowerWallVertical9ID
- Change HWallID -> PowerWallHorizontal9ID
-
- * BUG: Destroy Wall and Animate spells totally do not work with the new
- multi-damageable variations of walls system. NOW FIXED.
-
- * Artur _finally_ sent in a 50% translation of the game. (He promised it
- would be done by Jan 2nd, 2001)
- English.catalog 4237
- QuickStartDocs.txt 7380
- SpellDescriptions/ C-Z 85025
- TOTAL: 96642 bytes (50% = 95529)
-
- Combining the 50% translation + his mods = the agreement we made many
- eons ago.
-
- * Spent several hours compiling/testing/archiving/sending Artur his v3.04re
- version of chaos.
-
- * Spent 1 hour investigating why the png gfx of the website work on all
- amiga webbrowsers and on MSIE but not on linux or netscape mac.
-
- Feb. 18, 2001: Experimented with drawing damaged Lions.
-
- Feb. 19, 2001:
- * BUG: I put chainsaw on my ghost and it didn't make the chainsaw noise!
- (when I attacked a red dragon)
- Ok right now it is set so that if a creature already has an attack sound
- then it just keeps playing the normal attack sound when you have a
- chainsaw. The chainsaw noise is only played on creatures who have no
- attack sound. Should this be changed? I think the answer is yes.
- NOW FIXED.
-
- * INCLUDED: Xav's new Free and Free All gfx into the game.
-
- Robin writes:
- > Raise Dead: A powerful spell, if wisely used. The comupter, however,
- > does not use it wisely: I played a game with all 8 wizards in one team,
- > against 26 generators. there happened some fierce combat and then a wizard
- > who had the Depth power-up spoke the Raise Dead. But he didn't raise the
- > Blue Dragon that was lying in front of him, no, he raised that stupid
- > Fire Bat in some corner of the board?!
- > How does the computer choose what corpus it raises?
-
- Ok I looked into this and it seems to be completely random! I never knew
- that!?!
-
- * STUPID: Raise Dead and Resurrection are cast completely randomly with
- _no_ AI whatsoever. I have now changed this to make it use the general
- Dangerousness() algorithm. NOW FIXED.
-
- Feb. 20, 2001:
- * Compiled v3.04d for Aminet.
-
- Feb. 21, 2001:
- * PROBLEM: I will soon be entering in 24 variations of the Lion. But I
- don't want to have to waste 24 identical dead images of the Lion so I need
- to implement Groups (of IDs) into the game. NOW FIXED.
-
- * Creatures need a Group: tag in the spell file.
- If this tag is missing then Group = 0. If Group==0 then there's no
- group. Otherwise Group is the ID to get the dead body information from.
- This way I don't have to have a jillion identical dead body images for
- every creature-variation! Group tag added. DONE.
-
- * InsertCorpse() and InsertCorpseUnder() must be modified to check for
- IF (InitialData(id).Group != 0) id=InitialData(id).Group;
- DONE.
-
- * Test out putting in a lion with no dead body and see if the tilecount
- goes down by 1!
- BEFORE: tiles 228864
- AFTER: tiles 228672
- Yeah! It works!!!
-
- * Included FD's new SpellsToTexInfo.rexx and his new paragraph fixed
- English and Français spell descriptions A-D.
-
- * I split Readme.txt into 2 seperate files: History1997-1999.txt and
- History2000.txt. I deleted Readme.txt since it really isn't intended for
- the general public to read. It is just the history of implemented changes.
-
- * BLOOD: Xav says that with the new bloody versions of the creatures the game
- will become a blood bath and some people may not like that. Therefore we
- need a Blood on/off feature. DONE.
-
- * I put the Blood option on the setupscreen, the gamesave file and the
- prefs file. DONE.
-
- * BUG: The score of the independents is NOT saved with the game!!!!
- in score.c and io.c change MAX_WIZARDS to ENTITIES
- While I'm at it I'm going to convert all existing levels to have
- BloodMode=ON.
- Reload and resave ALL the levels using the new routine.
- NOW FIXED.
-
- Feb. 22, 2001:
-
- * Included FD's new ChaosDocs.texinfo fully updated for V3.1 of Chaos.
-
- Feb. 23, 2001:
- * Included the new setup screens including the new Blood option for
- English, Français and Deutsch.
-
- * Included FD's new Paragraphized English and Français spell descriptions
- A-Z.
-
- * Included FD's new scripts/ dir for making documentation related files.
-
- * Included Krzynio's Polski ChaosLite.readme and Valwit's Deutsch
- ChaosLite.readme into the aminet v3.04 version.
-
- Feb. 24, 2001:
- * Uploaded v3.04 to Aminet with a readme in all 5 languages. The Rosetta
- Stone of .readmes. :) The purpose of this version is to have a 100%
- version sitting on Aminet during the months that it takes me to prepare the
- next MEGA release of Chaos. Archive size is: 5933797 bytes.
-
- Feb. 25, 2001:
- * 12:01 a.m. I saw the new ChaosLite.lha (v3.04) materialize onto Aminet.
-
- * 8:00 a.m. Updated the website contacts.html and downloads.html from Chaos
- v3.0 to Chaos v3.04.
-
- * Implemented the complete new Lion. 72 tiles + 1 tile for the dead body.
-
- Lion
- Lion d1
- Lion d2
- Lion d3
-
- Lion 3 legs
- Lion 3 legs d1
- Lion 3 legs d2
- Lion 3 legs d3
-
- Lion 0 legs
- Lion 0 legs d1
- Lion 0 legs d2
- Lion 0 legs d3
-
- Lion wings
- Lion wings d1
- Lion wings d2
- Lion wings d3
-
- Lion 3 legs wings
- Lion 3 legs wings d1
- Lion 3 legs wings d2
- Lion 3 legs wings d3
-
- Lion 0 legs wings
- Lion 0 legs wings d1
- Lion 0 legs wings d2
- Lion 0 legs wings d3
-
-
- * PROBLEM: When playing the game in English, the translated spell names are
- not shown at the bottom of the screen. Only the TRUE name of the creature
- is shown (such as "Lion wings d1"). This looks tacky. This has never
- really been correct but it has always been tolerable until now because we
- have so many jillions of damaged versions of objects.
- Possible Solutions:
- A: Make new spell description files for these new object variations and
- then force the English mode to use these translated names instead of the
- true names.
- B: Make the bottom of the screen code and the info panel code display the
- name of the Group that the object belongs to rather than the exact name
- of that ID.
- This sounds like the easiest option since it requires 0 new spell
- description files to be created, edited and maintained.
- Ok I just made a simple change to the CreatureName() function so everything
- that prints the name of a creature in the whole program should now
- automagically work with this new system. NOW FIXED.
-
-
- * BUG: Ack! Certain names of certain spells are totally wacked out in
- Français mode! Lion, Faun, Cobra work. Passage, Invulnerability,
- Vengeance, Justice, Abduction, Raise Dead, X-Ray, Unicorn do not work.
- Ok I just spent a whole hour investigating this problem. I _finally_
- figured out what is going on! This is all because the lists of spell names
- in SpellDescriptions/#?.txt were not rebuilt after I added in the new
- spells! These must be rebuilt each time a new spell is added. I'm going
- to change the makefile to delete them all each time I do a "smake clean"
- (like it used to do). NOW FIXED.
-
-
- Feb. 26, 2001:
- * GROUPS: I went back and put all power walls into 1 big group.
- I also put all other damagable walls and rocks into their own individual
- groups. This fixes foreign translation problems.
-
- FD Writes:
- > * During special combat, "independents" is still printed at the bottom of
- > the screen.
-
- I just tested this and it didn't say "independents" but it did say
- "range = 0" at the bottom. NOW FIXED.
-
- > * When a creature comes back from the astral plane, during the subsequent
- > spell selection, the player # key shows it as unmoved. Just a detail.
-
- I propose that _all_ creatures should be set to unmoved during the spell
- selection phase. This has been bothering me for a long time. I always
- want to check how far a certain creature can move during my spell selection
- but I never can because they have all been set to "already moved".
- NOW FIXED.
-
- > * My wizard mounted an independent flying carpet (BTW, I was quite surprised
- > to see such a "creature" to be generated), but I cannot move the carpet. I
- > can't even dismount. While this is OK for magic wood (but what would happen
- > if someone casts stone to flesh on the tree I'm meditating in?), this is
- > quite disturbing for creatures.
-
- What is happening now is that the game checks if something is a Meditation.
- If its a Meditation and its empty then anyone can enter it, even if the
- meditation is a creature that belongs to someone else.
-
- Possible solution:
- Do not allow wizards to mount CREATURES which belong to the enemy, even
- if the creature is a meditation. This sounds perfectly sensible to me
- and this is the way the game has traditionally always worked.
-
- Ok I just added in the line of code to prevent human wizards from mounting
- enemy meditation creatures. But now I am thinking I should have just left
- it the way it was. It sounds pretty cool that you can mount an enemy magic
- carpet in an emergency. You should eventually get a bonus spell out of it.
- But if you have only 1 enemy and you are mounted on his Magic Carpet then
- you'll be invulnerable because he won't attack his own stuff to get at your
- wizard. Is this an interesting strategic aspect? Or a bad design flaw?
-
- Aaaaaugh! I don't know what to do!
-
- I'm leaving the fix in since I already put it there.
- So the rules currently are:
- "You cannot mount any enemy creature."
- "You can mount an enemy inanimate object if it is a meditation object and
- nobody else is already mounted there."
-
- * ADDED the code to prevent computer wizards from mounting enemy
- creature meditations to many AI routines and movement routines.
- This took 1 hour.
-
- * TEST: Placing one of my Magic Carpets next to an enemy wizard to see if
- he can sneak mount it. The enemy computer wizard attacked it. PASSED.
-
- * TEST: Surrounding an enemy wizard with my Magic Carpets. The wizard
- could not mount them, he attacked them instead. PASSED.
-
- * TEST: Surrounding my allied wizard with my Magic Carpets. The wizard
- could not mount them nor attack them. PASSED.
-
- * TEST: Surrounding an enemy wizard (who has max manoeverability)
- with my Magic Carpets. This is to make sure he is not engaged.
- He just attacked one of my Magic Carpets. PASSED.
-
- > * My creatures accept to attack this carpet. They should not, since it's
- > (supposed to) be a hide for me.
-
- Its an enemy creature, so of course they accept to attack it. :)
-
-
- If you are mounted in an enemy Dark Citadel and someone casts Stone to
- Flesh on the Dark Citadel you will then be mounted on an enemy creature and
- you won't be able to dismount because the game does not allow you to click
- on enemy CREATURES. You have always been allowed to click on enemy
- inanimate objects IF you are mounted in them.
-
- Possibilities:
- A: Leave it alone. The Dark Citadel will collapse soon enough and you'll
- only be trapped for a while.
-
- B: Modify the code to allow you to dismount from an enemy creature.
-
- C: Allow people to control enemy creatures if their wizard is mounted on
- them. (This sounds really weird to me.) If we did this then I think
- _both_ players (the player who owns the creature and the player who is
- mounted on the creature) would each control the creature in turn. A
- split-personality psychotic creature. I recall this happening in some
- games years ago, possibly due to some silly bug.
-
- > E. When the wizard somehow mounts an object (be it a creature or inanimate)
- > that does not belong to him (like a foreign meditation object, or if s.o.
- > casts stone to flesh on a citadel), then this object is automatically
- > tranfered under his control (because of the spatial confinment mounting
- > allows, increasing the concentration of astral & psionic particles) :-)
- > Just like a 100%-success subversion.
-
- When I was going through piles of AI routines and editing them so that
- computer players will now (allegedly) not "think" that they can mount
- enemy creature meditations... I was half-tempted to change the rules and
- allow _ANY_ wizard to mount _ANY_ mountable creature.
-
- My idea goes like this:
- 1. Any wizard can mount any mountable creature.
- 2. Perhaps allow wizards to dismount anything they are mounted on.
- Or maybe not.
- 3. If you are mounted on an enemy creature then you get to control it, but
- since it is an ENEMY creature your movement might be very limited (you
- might get engaged to your own real creatures). And you won't be able to
- attack things owned by the same owner as the mount you are riding.
- But you nevertheless could still move and attack things belonging to
- other players.
- 4. If you are mounted on an enemy creature then the real owner of that
- creature still gets to control the creature as normal on his turn.
-
- So for example you might be about to die, you have NO choice but to mount
- the enemy Elephant that is about to kill you. (You have previously cast Ride).
-
- Suppose the Elephant belongs to player 1 and you are player 8.
-
- Each turn Player 1 will move the elephant and kill one of your puny orcs.
-
- Then on your turn you charge off in the other direction to kill an enemy
- creature.
-
- I think it would be cool to be mounted on an enemy creature. You never
- know where he'll take you! You have some control over him. But he has
- some control over you too! It could be wild!
-
- On the other hand it might be stupid, if you have only 1 enemy because
- he would never attempt to harm his own creature.
-
-
- I didn't attempt to put this idea into the game because:
- 1. You guys don't seem to like it.
- 2. There is a good chance that it will cause some secret side-effect bugs
- that will have to be debugged and I don't feel like working that hard
- on it right now.
- 3. Even if no new bugs get created, it will still take some time to think
- about all the AI routines and movmenet routines and how to modify them
- to work correctly with the new rule.
- 4. It might be a totally stupid idea.
-
- Perhaps I will put in some #ifdef code some day to test out this idea
- temporarily, just to see if it works ok, if its any fun or not, etc.
-
-
-
-
- * INCLUDED: Xav's new Centaur, Juju Zombie, Pox and really awesome Pegasus
- gfx!
-
- * IMPLEMENTED: the complete new damagable Leopard (24 IDs, 73 tiles) and
- the new damagable Elephant (24 IDs, 97 tiles).
-
- * There are now 3 damagable creatures in the game: Lion, Leopard, Elephant.
- I guess that is enough until I hear back from people if they like them
- or don't like them or whatever.
-
-
- Feb. 27, 2001:
- ======================== SOME ANNOYING BUGS ============================
-
- * ANNOYING BUG: During the movement phase when you are moving your
- creatures around; when you click on an object to attack it the amount of
- life left in the object is not updated at the bottom of the screen.
- In order to force the screen to update you must move the mouse entirely
- off the current square and then back onto that square.
-
- * ANNOYING BUG: When you shoot an object, the life at the bottom is not
- updated until you move the mouse completely off the square and back onto it.
-
- * ANNOYING BUG: When you shoot an undead object and kill it so that the
- square is now completely empty, the text at the bottom of the screen still
- says the name of the object that WAS there, not what is _currently_ there!
- You must move the mouse completely off the square and back onto it again
- to see what is really there.
-
- * ANNOYING BUG: When you kill a growth and the growth dies and reveals a
- covered creature, the text at the bottom of the screen STILL says you are
- pointed at the growth! It doesn't update to show what you are REALLY
- pointing at now. You must move the mouse pointer off the current square
- and back onto it to get it to update the text.
-
- * ALL ANNOYING BUGS NOW FIXED! (I put a Clearoxoy() everywhere there was a
- RecalculateAllDamagedObjects() + I put one at the end of SayCreatureName())
- =========================================================================
-
- * PROBLEM: The Level Editor menus are about to overflow with all these
- bajillions of damaged object variations. I have now changed it so that
- damaged variations of objects are not shown in the menus, only the original
- primary object is shown. NOW FIXED.
-
- Arrrgh! Now that I fixed the level editor bugs the game won't link!
- SLINK WITH temp_smk.tmp
- Slink - Version 6.58
- Copyright (c) 1988-1995 SAS Institute, Inc. All Rights Reserved.
-
- Error 502: @MENUSpeech symbol - Distance for Reloc16 > 32768
-
- First Reference in Unit chaos.c at offset 000001ae in file 'chaos.o'
- To Unit menu.c at offset 00000010 in file 'menu.o'
- Caused by line 723 in file chaos.c
-
- Chaos.o debug=fullflush is 181540 bytes. That seems to be about the limit
- before this retarded >32768 bug starts happening. :(
-
- * ADDED: code=far to the compilation of chaos.c. Now Chaos.o is 182564
- bytes and the game compiles and links perfectly now!
-
- * I improved the gfx for Uncertainty, Inanimorphobiosis and Mass
- Petrification.
-
- Feb. 28, 2001:
- * I had to go back through all 72 Tower spell files and add in a line
- Group: TowerLevel5ID to each one. This should hopefully solve all
- on-screen translation problems.
-
- * BUG: Magic Carpets NEVER collapse! I had just assumed there was code
- in BoardUpdate() to go through and check all meditations and randomly
- collapse them. But in fact, each object must be hardcoded in to be
- checked for. I will rewrite it later. For now I added MagicCarpetID
- to the list of things to check for. NOW FIXED.
-
- * BUG: Damaged objects don't make their attack sounds, death sounds or
- kill sounds! NOW FIXED.
-
- * I Changed the combat, death and kill sounds determination code to
- play the sound associated with that SPECIFIC ID. If it doesn't have
- one then it checks if this thing is in a group and if it is then
- it uses the sound from the Groupid (if the Groupid has a sound).
- This allows super maximum flexibility because now a Winged Lion could
- have a different kill, death or combat sound than the regular Lion.
- There is no immediate need for this but the need will arise in the
- future.
-
-
- On 28-Feb-01, Robin Schmidt wrote:
- > I've got some strange tales to tell. Sit down and listen, my friend...
- >
- > 1. There once was an Emerald Dragon. It was strong and proud and it got the
- > ability to reincarnate. Wenn it destroyed the Weak Wall of an enemy wizard
- > with a mighty blow of its claws and a blast of fire, it perished itself due
- > to the Eye For An Eye spell of that enemy wizard. But lo! it reincarnated
- > and returned as a fresh Green Dragon, and at once, within the same turn, it
- > attacked its enemy with claw and breeth again! A mighty ally, isn't it?
-
- Yes indeed.
-
-
- > 2. There once was a T-Rex who came along to fight against me. I stopped it
- > with some undeads and shot a Toxity Beam at it. Its magical resistance
- > dropped him dead within three turns, but I wondered how it could continue
- > fighting with its full strength of 15, though it ought to loose one point
- > per turn?
- >
- > Strange things, my friend, strange things...
-
- Thank you for reporting this bug! I just spent a whole hour fixing it.
-
- * BUG! Manoeverability, combat, ranged combat and special combat recovery
- don't work right! Example: if some thing with max manoeverability and max
- combat gets hit with toxicity beam then his combat and manoever stats NEVER
- DECREASE! Even though all his recovery rates are at -1! NOW FIXED.
-
- * Included Xav's new Derro, Eagle, Faun and Hybsil.
-
- March 1, 2001: I woke up and my throat was completely dry and hurting
- and my head feels bad. I'm getting sick again! :(
-
- * STUPID: Computer wizards sit next to 4 Dark Woods, taking 8 points of
- damage each turn, even though there are MANY safe squares that the wizard
- could move to! NOW FIXED.
-
- * TESTED: Played some test games. The Wizards seem to move ok.
- If you notice computer wizards moving in a completely stupid manner then
- please let me know and send me the before and after autosaves please!
-
- * TESTED: I placed Nuked squares and powerful creatures on 1 side of a
- wizard and Nuked squares with MANY Shadow Cities just beyond in an attempt
- to trick the wizard into moving himself into the Nuked square and dying.
- He did not move into the Nuked squared. PASSED.
-
- * TESTED: As above but with pits. PASSED.
-
- * I got my Commodore 1960 Multisync monitor up and running on the A3000,
- A1200 and PC. It can scan up to at least 37.9 Khz even though the
- instruction manual says 35.5Khz. Of course it scans down to 15.75 Khz.
- It can do at least 800x600 noninterlaced @ 60 Hz. It can do at least
- 1024x768 interlaced.
-
- * I drank lots of mineral water. I feel somewhat better now.
-
- March 2, 2001:
- * I designed the numbers 0-30 in a nice smoothed out manner using a 6 point
- font. I made red and green versions. This is for use in the new
- CellEffects.
-
- * I took Xav's new Attack CellEffect made 31 versions of it (0-30) using
- red numbers. This will be the new standard Attack cell effect. The 0-30
- is to show the damage being done. 30 is the maximum damage that can ever
- be inflicted by a single hit (max combat + Battle Cry)
-
- * I took the old original Attack CellEffect and improved it a little and
- then made 31 versions of it for use as the new Healing CellEffect.
- We really need a better animation for this though.
-
- Attack (unspecified damage, unused)
- Attack0
- Attack1
- Attack2
- ...
- Attack30
-
- Heal (unspecified damage, unused)
- Heal0 (This is unused also)
- Heal1
- Heal2
- Heal3
- ...
- Heal30
-
-
- We still need some good animations for the following effects:
- 1. Poisonous attack. (e.g. Giant Rat, Cobra etc.)
- 2. Healing attack. (e.g. Hippocrates, Pool, Aesculapius, etc.)
- 3. "Weird" attack. (An attack against a weird statistic like e.g.
- Intelligence or Maneuverability or something. Mind Flayer, Spectator,
- etc.)
- 4. An attack against multiple statistics at once e.g. Arctic Wolf, Iridium
- Horse, etc.
-
-
- March 3, 2001:
- * Did the programming to display the new attack and heal fx in the game.
- This requires rewriting CellEffect() to take YET ANOTHER parameter for
- the damage (or intensity) of the effect. Most effects will be ignoring
- this parameter, at least at first. For now only the Attack and Heal effect
- will make use of the damage (intensity) parameter to display the amount of
- damage being done during the attack.
-
- AAAAAUUUGGGHHH!!! I'm going crazy!!!!
-
- There are 58 spell files with a CellEffect() call in them!!!
- There are around 70 CellEffect() calls in the spell files + lots more in
- the main program files.
-
- Every time I upgrade CellEffect() or other functions I always spend all
- year loading up each individual spell file and editing it and saving it and
- its driving me insane.
-
- It would be REALLY nice if all the code was in 1 file.
-
- I've done a million of these upgrades of various functions and each time
- its the same old story. Load up a bajillion seperate files, edit them and
- save them. It would just be sooooo much easier on me to have only a few
- code files instead of hundreds.
-
- What is the solution?
-
- Ok I worked out a solution. At least this will work for the time being:
- flashfind from "" search CellEffect quiethit nohighlight >t:t
- produces a nice list of filenames like this:
-
- GAMES:sc/Chaos_3.2/cast.c
- GAMES:sc/Chaos_3.2/cell.c
- GAMES:sc/Chaos_3.2/chaos.c
- GAMES:sc/Chaos_3.2/core.c
- GAMES:sc/Chaos_3.2/move.c
- GAMES:sc/Chaos_3.2/start.c
- GAMES:sc/Chaos_3.2/warp.c
-
- Then I just do some searching and replacing in CED to make it look like:
-
- work:ed GAMES:sc/Chaos_3.2/cast.c -sticky
- work:ed GAMES:sc/Chaos_3.2/cell.c -sticky
- work:ed GAMES:sc/Chaos_3.2/chaos.c -sticky
- work:ed GAMES:sc/Chaos_3.2/core.c -sticky
- work:ed GAMES:sc/Chaos_3.2/move.c -sticky
- work:ed GAMES:sc/Chaos_3.2/start.c -sticky
- work:ed GAMES:sc/Chaos_3.2/warp.c -sticky
-
- Then I just execute t:t and I just saved TONS of work.
- (There are 58 more files in the Spells/ dir)
-
- Now If I can just get FD to make me a script or something to do all that
- automatically I'll be set. :)
-
- Now I must decide if I actually _want_ to add this new parameter to
- CellEffect() or if I should just make a new routine called CombatEffect()?
- On the 1 hand, out of 170 occurrences of CellEffect() calls only a few of
- them (the ones in the combat routine) need the extra parameter. On the
- other hand, the other effects _MAY_ need the extra parameter in the future
- once someone makes more intricate gfx animations for the other fx....
-
- So I guess I'll go ahead and edit all those calls to have the extra
- parameter. DONE.
-
- * BUG: Speech for Blood Worm does not work. NOW FIXED.
-
- March 4, 2001:
- * Played a test game to test the new effects. Seems to work ok.
-
- * Made an actualDamage(player,damage) function to tell me the actual damage
- that will be done, taking into account vodka and battlecry so the ranged
- combat and special combat routines will know which CellEffect to show.
-
- Robin Writes:
- > But what about Torment and Discard? My computer-allies really
- > like to cast that on me.
-
- Ok, good point! I just now fixed it so that Torment and Discard use the
- same AI as Coercion. This means they won't cast it if ALL the wizards are
- on the same team.
-
- I don't know what to do about if you and 1 computer guy are in an alliance
- against several other wizards.
-
- > When I had a stunned creature, which couldn't move due to a Basilisk, there
- > are two undocumented features: 1. The creature CAN actually move. It just
- > has to kill any enemy it is engaged to and then moves into its square.
-
- Absolutely correct.
-
- > 2. (never tried it): You can *speed it _up_* using the slow spell
- > (setting his moves to 1), can't you?
-
- Hehehehe, YES! You can do that!!!! I forgot about that! I can see you
- have become a formidable champion of the ways of Chaos!
-
- > And one idea about Power Walls: Let them stay active even when the wizard
- > dies. They have enough energy to maintain themselfs, don't you think so?
-
- That could be an interesting idea.
-
-
- * INCLUDED Robin's new Kurzanleitung v1.2 (he edited Valwit's v1.1)
- * INCLUDED Robin's new Deutsch spell descriptions A-S.
-
- * Robin sent in a very nice 3x3 squares gfx of an explosion! For use by
- the Goblin Bomb or Hand Grenade or whatever we want! Now I must figure
- out how to load the thing into the game. Should it be a .iff or a .anim or
- a .animbrush or ?
-
- March 5, 2001:
- * CURSOR KEYS: There are certain times during the game where I just want to
- smoothly and easily check the life of a bunch of things in a straight line.
- There is no easy way to do this with the mouse. I try pressing the cursor
- keys to move the mouse pointer but nothing happens. Also, in the level
- editor there are DEFINITELY LOTS of times where I need cursor key control.
- Like when I am trying to just quickly build a long wall. So I have now
- programmed the cursor keys to move the mouse pointer exactly 16 pixels in
- the chosen direction. NOW FIXED.
-
- * Zoltan sent in piles of gfx and sounds for use in Chaos: World's Best
- Strategy Card Game. The only trouble is that I already have hundreds of
- good unused sounds laying around on my hard drive, but I can't decide what
- sounds to use for what event.... And the gfx seem to be drawn in about
- 26x16 pixels for a 640x256 screen so they look very short and fat on a
- square-pixel Chaos screen of 320x256 or 640x512. Also the gfx are drawn
- in only 16 colors with 0 antialiasing. However some of the gfx still
- look really cool. Many of the sounds are great! My mind is going to
- explode! Aaaaauuuuggghhh!!!!
-
- March 6, 2001:
- I fiddled around with Dpaint 5 and animbrushes.
- I tried to play an animbrush file using the ShowAnim command in my C: but
- it crashed. ShowAnim only works with .anim files. But .anim files always
- seem to take up the entire screen. :(
-
- * Xav sent in BAZILLIONS of nice tiles!!!! Lots of walls but no damaged
- variations.
-
-
- March 7, 2001:
- Robin Writes:
- > A creature just attacked the (enemy) Magic Tree his wizard sits on.
- > Kinda stupid?
-
- Ok I have now adjusted the AI code to realize that attacking an ENEMY unit
- with a FRIENDLY wizard mounted on it is stupid. This includes attacking
- with combat or ranged combat. NOW FIXED.
-
- * STUPID: Computer creatures will heal friendly units (such as Magic Trees
- and Castles) which have ENEMY wizards inside them! This includes healing
- with combat and ranged combat. NOW FIXED.
-
- Fiddled around with Dpaint and morphing and explosions. For some reason
- when I morph my brushes I get excellent graphical results but they are all
- out of alignment! And I don't know how to realign them perfectly!
-
- March 8, 2001:
-
- * BUG: PlayNextThemeSong() is blindly opening and reading and writing
- files with no error checking! This causes the game to crash when run
- from a write-protected media. Most CD's are write-protected. :)
- NOW FIXED.
-
- * BUG: UpdateTimeSpentPlayingChaos() terminates the game as soon as it
- fails to write to the update file. Which means it will always terminate
- the game when run from CD. NOW FIXED.
-
- * BUGs: Various pieces of code in start.c call TerminateChaos() as soon as
- any disk write operation fails. So the game will just quit and not
- start from CD. NOW FIXED.
-
- Ok, now the game runs from CD but there are various annoyances:
- 1. A requester pops up twice each turn saying "Volume CD0: is
- write-protected" "Retry/Cancel". (Once for PlayNextThemeSong() and once for
- UpdateTimeSpentPlayingChaos()).
-
- 2. The game now tries to rebuild the indexes of all the thousands of
- translation and graphic and sound files EACH and EVERY time you load the
- game from CD. This makes a huge delay every time you load the game.
-
- SOLUTION: Make PlayNextThemeSong() check for write-protectedness of the
- disk and set a global variable DiskIsWriteProtected appropriately.
- Then all the "file-writing" pieces of code can check this and avoid all
- writes. NOW FIXED.
-
- * Chaos can now be played from CD or other write-protected media.
-
- March 9, 2001:
- * UPLOADED v3.04cd to Aminet with the CD-fix and the "special combat
- against nobody" fix.
-
- Investigated various options of getting an AGA Amiga up and running.
-
- March 10, 2001:
- * BUG: I can't get any INACTIVEWINDOW messages! :(
- I was going to program in "pause mode" to stop the animation whenever you
- click to another program. This would save millions of CPU cycles. But I
- never get any IDCMP INACTIVEWINDOW messages! What is going on?!???
-
- Ok, here was the bug: This code has been wrong for years!
- USHORT class = msg->Class;
- ULONG code = msg->Code;
-
- The correct code is:
- ULONG class = msg->Class;
- USHORT code = msg->Code;
-
- There were a total of 14 occurrences of the above buggy code scattered
- throughout the realms of chaos! ALL NOW FIXED!
-
- * PAUSE MODE now works perfectly! Anytime you click into some other window
- of some other program the CHAOSANIM task stops animating the screen.
- I had thought this would be a good feature years ago but I didn't know
- how to do it. This can greatly reduce the multitasking cpu load. This
- feature is dedicated to Robin Schmidt who asked for it.
-
-
- March 11, 2001:
- I spent all day shopping for Amiga upgrades.
-
- Local computer store:
- $ 99.00 30 Gigs Seagate Ultra DMA/100 hard drive.
-
- $115.00 40 Gigs Western Digital /100 hard drive.
- $ 40.00 32 Megs EDO ram 72-pin SIMM 60 ns
-
-
- Mail order:
- 40Mhz 040 accellerator $240.00
- 50Mhz 060 accellerator $430.00
-
- 2.5" to 3.5" IDE adapter ?????
-
- Total upgrade cost 430+115+40+50(shipping etc.) $635.00 !
-
- I was thinking about how much trouble it was going to be to reinstall all
- these jillions of megs of software onto the new A1200 hard drive. Then I
- came up with an idea! Instead of buying a new 30 gig IDE hard drive I will
- just buy the SCSI module instead and then take the drive out of my A3000
- and put it into my A1200 and *poof* everything is instantly installed
- perfectly! The OS, the compiler, all my utilities and fonts and C:
- commands and EVERYTHING!
-
- I didn't want to have to buy a SCSI controller. But this will save me TONS
- of time! So it will be worth it. And since I am getting an extra SIMM
- socket on the SCSI controller I can now buy 2 of these cheap 32 meg SIMMS!
-
- New plan:
- $430 Blizzard 1260 accellerator
- $ 80 2 32-meg 72-pin 60ns SIMMS
- $130 SCSI-2 module for accellerator.
-
- 430+80+130+50(shipping etc.) = 690
-
-
- * SLICED my foot wide open. Blood is going everywhere. I left the case of
- my A4000 laying on the floor upside down the other day. Now I stepped on
- it. This sux. I just hope it doesn't get infected.
-
- --------------------------------------------------------------------
- * PROGRAMMING TIPS FROM FD:
- lock=Lock("PROGDIR:"); then do Info(lock); to _ASK_ if the disk is
- write-protected without generating any OS requesters.
-
- Second, easiest way: try to write a temp file (or do a SetDate() or
- something). To prevent the requester from appearing, just load your
- process's pr_WindowPtr field with -1L:
-
- pr=(struct Process *)FindTask(NULL);
- savedPtr=pr.pr_WindowPtr;
- pr.pr_WindowPtr=-1;
- /* do your testing here */
- pr.pr_WindowPtr=savedPtr;
-
- this field, if !=0 and !=-1, points to a struct Window whose screen is used
- for requesters that might appear during dos operations. If 0, the WB screen
- (default public screen) is used, and requesters get automatically cancelled
- if -1. You MUST restore the original value in case a CLI program filled it
- before calling chaos. I think VinCEd does it.
- ----------------------------------------------------------------------
-
- * INClUDED Artur's B Polski descriptions.
-
- March 12th, 2001:
- Imbe sent in a TON of new gfx! But only the BEST ones make it into the
- Realms of Chaos. :)
-
- -----------------------------------------------------------------------
- INCLUDED the following gfx from Imbe into the game!
- Aesculapius
- Agathion (Weird effect :))
- I put in his Brown Bear as the new Grizzly Bear! (It was too blocky so I
- antialiased it just a little)
- Chronomancer!
- Combat Drain Beam (use old Combat Drain Beam as one of the other beam drain
- spells?)
- Consecrate looks great! So do the variations!
- Cursed Sword (I antialiased it)
- Dao (WOW!) I antialiased it a bit.
- Demonic Touch Beam
- Horse (I fixed it and antialiased it.)
- Marid (WOW!)
- Wight (He looks very scary!)
- Wizard 4 (I had to scoot it over 1 and test it! The 1st frame was in the
- corpse area)
- Wizard 5 looks similar to Marid.
- Wizard 8 (I had to scoot this one over also) HE LOOKS COOL!
-
- Betrayal (imp turning away from master) I had to antialias it some and add
- some more detail.
- Subversion (imp facing master being charmed with magic) I had to antialias
- it some and add some more detail.
- -----------------------------------------------------------------------
-
- The following gfx and all others that he sent, I put into
- gfx/unusedgfx/Imbe
-
- I was going to use Arctic Wolf but Xav already made a new one of it.
- Note: If you set your grid to 16,16 it really helps to keep things aligned
- when you move things around.
-
- Bless looks good, should I use it ?
- The Ghoul looks good but I liked the old ghoul. What should I do?
- The new confidence spell makes more sense. But then what would I use the
- candle for?
-
-
- I would like to use these as something else but I don't know what?
- Banderlog
- Bolter
- Cloak
- Dark Power
-
- * Imbe is officially inducted as a member of the Chaos gfx team!
- Go Imbe go! Yay Imbe!
-
-
- March 13th, 2001:
- My foot and leg feel strange. Parts of it feel numb. I don't know if this
- is from some internal infection or if it is just because I have been
- walking around on my foot sideways all day. It really hurts my foot to
- walk sideways on it, but I'm afraid to just walk normal.
-
- -------------------------------------------------------------------------
- .animbrush EOR drawbacks.
- -------------------------------------------------------------------------
- According to the Motorola 68030 Enhanced 32-bit Microprocessor User's
- Manual:
-
- Assuming nothing is in the Data Cache and all An are pointing at FASTram:
-
- move.l Dn,(An)+ = 3 cycles
- eor.l Dn,(An)+ = 6 cycles
-
- However if An is pointing to something that is in the datacache then it
- should look like:
- move.l Dn,(An)+ = 3 cycles
- eor.l Dn,(An)+ = 5 cycles
-
-
- The whole point of the .animbrush format is to write directly to chipram
- and allow instant forward/reverse playback and not use double-buffering.
- If the data being written is in chipram as intended then... everything
- will be much much slower. Its too scary for me to even think of doing the
- calculations. :)
-
- But it would look something like
- eor.l Dn,(An)+ = 12 cycles on 25Mhz 030
- eor.l Dn,(An)+ = 20 cycles on 50Mhz 030
-
- Double, triple or quadruple the times if the gfx mode is a highres/lots of
- colors/doublepal mode. It probably takes ~80 cycles on a 50Mhz 030 to do
- it in 640x512x8bitplanes doublepal mode. These are just estimates.
-
- .animbrush format is looking worse and worse all the time :)
-
-
- Maybe we should concentrate on a .animbrush to .anim converter
- and/or a .animbrush to "all tiles on 1 huge screen" converter?
-
- -------------------------------------------------------------------------
- End .animbrush EOR drawbacks.
- -------------------------------------------------------------------------
-
- We ventured to the computer store. WOW! This place turned out to be the
- MEGA-Computer-Store! It has 180,000 square feet, 50 foot ceilings, it has
- EVERYTHING!
-
- They have a bunch of halfway reasonably priced tower cases! I saw some
- tower cases with 250 watt power supply for only $50.00. There was even a
- mini-tower case (AT) with 200 watt power supply for $29.00!!!!!!!!!!
- Even _I_ can afford that!!!! Unfortunately I have now idea how big a case
- needs to be to fit an A1200 motherboard + addons. So I didn't buy one :(
-
- I bought 2 EDO 72-pin 60ns SIMMS for $40.00 each.
-
- I was going to buy some power extension cables and power my drive off of my
- A3000 power supply since my A1200 and A3000 will be sitting next to each
- other anyway, and since my A3000 power supply won't doing anything anyway.
-
- But then I saw something interesting!
-
- They have a connector that connects onto my A1200 motherboard 44-pin 2.5"
- IDE connecter and on the other end is a standard IDE 40 pin 3.5" connector!
- And the 2 power pins are connected to a standard hard drive power
- connector! This means I can mount a 3.5" IDE drive into my A1200 case and
- power it internally!!!! Or I can mount a 3.5" SCSI drive and power it
- internally!! Wahoo!! I just hope it will fit.
-
- I also bought the largest rubber feet I could find to stick onto my A1200
- to raise it up off the table to allow air flow under the case to keep
- things cool.
-
-
- March 14th, 2001:
- ----------------------- Begin LOS Bug ------------------------------------
- * BUG: Sometimes if you press the L, S or C keys in a certain way then you
- can cheat because the little boxes have erased a small part of the gfx and
- it allows you to have Line of sight to things that you are NOT supposed to
- be able to see! This bug only happens in NONexploration mode. Exploration
- mode does all its LOS testing on the ShadowBoard so it is unaffected by any
- lines drawn onto the screen.
-
- Modify all keypresses to eliminate that LOS bug!
- DO NOT ERASE THE LINES, yes that is fast but it is incorrect. The actual
- graphic of the cell must be redrawn!
-
- Options:
- 1: Copy the entire screen (or just the affected cells) to a fastram buffer.
- Restore this from the fastram upon finishing the highlighting.
- Disadvantage: Slow to highlight.
- Advantage: Fast to unhighlight.
-
- 2. Don't copy anything anywhere. Just ReDrawCell() the affected cells!
- Disadvantage: Slow to unhighlight.
- Advantages: Fast to highlight. Doesn't require extra memory.
- This method WILL BE as fast as option 1 once I implement all images into
- fastram and use my asm rendering routines!
-
- ExplorationMode highlighting doesn't need to be changed! It doesn't test
- the screen pixel for LOS. It tests the ShadowBoard.
-
- NonExplorationMode is the only mode with the bug.
-
- ALL NOW FIXED.
- ------------------------ End LOS Bug ----------------------------------
-
- * PROBLEM: When the dungeon is composed of Apple Woods, each turn takes
- forever! This is because EVERY Apple Wood, performs special combat on
- EVERY other Apple Wood! I have now implemented a new menu option for
- Silent Special Combat. So this is NOW FIXED.
-
-
- March 15th, 2001:
- * Compiled, tested, compressed and mailed Joar's version. (3 hours).
-
- March 16th, 2001:
- * Conducted many timing tests using BusTest (Aminet:util/moni/bustest.lha)
- on my A3000. 1 guy on irc tested his Blizzard 060 50Mhz and got bad
- results but he was using a cgfx screen on his gfx card so I have NO idea
- what screenmode his chipram was in.
-
- I discussed accellerators with various people.
-
- Helped Jerry put his new computer desk together.
-
- March 17th, 2001:
- * I fixed Imbe's new Pegasus with better antialiasing. It is a combination
- of Xav's Pegasus with Imbe's animation. Teamwork rulez. :)
-
- * Wasted all day talking to idiots who _allegedly_ wanted to sell their
- amiga equipment but not REALLY.
-
- * I compared the timing tests from various people's computers and the
- results are: Apollo cards are faster than Blizzard Cards.
- Apollo SCSI sux and Blizzard SCSI is much better.
-
-
- March 18th, 2001:
- Wasted more time shopping for Amiga stuff.
-
- * Included Artur's Polski Spell descriptions A.
-
-
- On 19-Mar-01, Delacroix the Documentator wrote:
-
- > Just noticed this in the game (first game I've been playing since more than
- > 1 month!)
- >
- > * I threw a hand grenade on a (cloaked) wizard surrounded by 2 generators
- > and 1 cow catapult (and another creature IIRC). But each of the 5 objects
- > gave an alleluiah, and all were completely destroyed, except for the wizard
- > (but they shouldn't have been destroyed since they had enough life points).
- > On the subsequent bonus pannel I got 5 bonus kills: five times the same
- > wizard (who got killed by another creature in the meantime).
-
- NOW FIXED.
-
- ************************************************************************
- Begin: Random sound bug fixed!
- ************************************************************************
- On 18-Mar-01, Artur Chlebek wrote:
- > Welcome James.
- >
- > On 19-Mar-01 you wrote:
- >
- >>> Have you definately fixed that sound-looping/hanging bug ?
- >
- >> No. I sent the fixed version to a Professional Chaos Player by the
- >> name of Artur Chlebek and he reports the bug is still there
- >> (sometimes).
- >
- > Yup, very rare but it still happens. :(
-
- But doesn't it seem like it doesn't happen as much since I did the fix?
-
-
- >> I played a real game the other day with many ghosts doing many
- >> attacks and the bug never struck. For me the bug seems to be
- >> eradicated.
- >
- >> It honestly seems like a bug in the AmigaOS FindPort() routine.
- >
- > This is the reason of that bug I hope (PatchWork output):
- >
- > exec.library FindPort("JCSound.1") Severity 2: Forbid() missing, unreliable
- > result PC=019FA472 TCB=01801008 ("Background CLI") Data: 00000001 00000001
- > 000003ED 01801E8C 00000018 0060094B 006008ED 00000002 Addr: 01802D61
- > 01802D58 01801E8C 01802D60 018028F0 01802D58 01080CD0 01A8564C ---->
- > 019FA472 - "ram:ChaosDir/JCsound" Hunk 0000, Offset 0000299A
-
-
- WAAAAAAAAAAHOOOOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!
-
- PATCHWORK RULEZ!!!!!!!!!!!!
-
- In the future if you ever see any "Forbid() missing" things that is VERY
- BAD and I need to know about them immediately! Missing Forbid()s cause
- all sorts of TOTALLY BIZARRE, always random, not humanly understandable
- bugs!!!
-
- I think I ran patchwork before months ago. But it didn't help me any. I
- think I was using it to try to track down some startup/shutdown problems
- and I never activated any sound effects.
-
- * BUG: JCsound is doing a FindPort() without a Forbid() Permit()!!!!
- This is TERRIBLE! The reason I didn't know about it, (or even think
- about it) is because the JCsound source code is in its own dir so Flashfind
- from "" FindPort doesn't find anything when I am in the Chaos dir. (I am
- always in the chaos dir.) I had no idea this code was in there! Its just
- some cut & pasted code from Aminet to interface to the minrexx.c
-
- * SOUND BUG NOW FIXED THANKS TO ARTUR CHLEBEK! ALL HAIL KING ARTUR!
-
- * JCsound is now at version 1.01
-
- ************************************************************************
- End: Random sound bug fixed!
- ************************************************************************
-
- * I played a test game and the sounds seem to work 100% now! I didn't
- notice the speech bug either!
-
- * During my test game I found another little flaw with PatchWork involving
- InitSemaphore(&flashysem). NOW FIXED.
-
- * I no longer get those "Semaphore has nesting of 1, expecting 0" messages
- when I quit the developer version. This is sort of strange because that
- message is only involved with the BoardLock semaphore not the flashysem
- semaphore. More unsolved OS weirdnesses.
-
- * Chaos is now allegedly 100% bug-free!
-
- * Included Xav's new Centaur, Horse, Hybsil and Unicorn into the game.
- They have MUCH better running animations now!
-
- * I drank some caffeine (I haven't had any caffeine in around 10 days) and
- sat down and anti-aliased the Marid and the Wizard 5.
-
- * I changed 1 frame of the Wight. I antialiased Wizard 8.
-
- March 20, 2001:
- I'm using Xav's new animated wall as the Force Wall.
- I thought about using it as the new Power Wall but the Power Wall has 9
- damage variations and the Force Wall graphic has 0 damaged variations. I
- don't have time to draw the damaged variations right now. Perhaps later on
- Imbe, Robin or Xav will do them if they want.
-
-
- Force Wall*
- It would take some serious magic to get one of these onto your spell list.
- In fact, thus far, no wizard has ever succeeded in getting a Force Wall
- onto his spell list. These walls are just about impossible to obtain and
- are damn near indestructable. Many military complexes and dungeons
- have been built from these walls for exactly these reasons.
-
- ForceWallID
- ForceWallHorizontalID
- ForceWallVerticalID
-
- Max stats and max recovery rates.
-
- Tested and works perfectly.
-
- March 21, 2001:
- * I antialiased Wizard 1. Then I experimented with some lighting fx, added a
- couple of frames and the result is... I'm not sure if its good or just
- annoying. What do you think?
-
- * Included Xav's new Bird Lord, Pox Shield and Ride gfx. The Ride gfx is
- much MUCH better now! Thank you!
-
- March 22, 2001:
- * Included the following new gfx from Imbe: -----------------
- Discard (I antialiased it)
- Earthquake Shield
- Falcon (It was totally broken due to large amounts of color 32 splattered
- around. Then I antialiased it.)
- Fire Shield
- Wizard 7 (I like the magic flowing up and down the staff and the hand
- movement. I don't like the foot movement. While the head floating off is
- rather funny, I'm not sure I really like that in a wizard animation. I
- guess we will vote on this one.)
- Wizard 8 (need to antialias this!)
- Elephant
- ----------------------------------------------------------------
-
- * Put these Imbe gfx into gfx/UnusedGfx/
- Fire Elemental (Hmmm.. this one was just too weird for me :) But I'll try
- to use it as some new creature.)
- Emerald Dragon (Its a great _idea_ but the way it worked out, the animation
- is too jerky and not smoothly flowing. I think long sweeping motions would
- work a lot better than the short jerky motions.)
- Pegasus (I liked the previous Pegasus better.)
-
- * Included Xav's updated Derro, Nightmare, Omnibiologist, Shadow City
- * Xav's Disection has a VERY cool looking lightning bolt on it and I really
- like it! _but_ when I look at 1 (lightning bolt) 2 it makes me think that
- a lightning bolt will hit the target and split it into 2 parts.
- So I modified this gfx to look like a 1/2 symbol since the spell cuts
- everyone's life in 1/2.
-
- Xav fixed up Wizard 8 while Imbe was making a new wizard 8 so now I must
- 1. Copy the bottom part of Xav's wizard onto the NEW Imbe wizard.
- 2. Copy the head.
- 3. Antialias everything.
- Wow! That took a long time!
-
- March 23, 2001:
- * WOW! Joseph just taught me how to do Stencils in Dpaint! This is totally
- cool! If I would have known about this before I could have saved at least
- 30 mins of time when editing Imbe's Wizard 8 to have Xav's new Wizard 8
- clothes!
-
- * I Put the fixed JCsound + the Semaphorefix into v3.04 and then UPLOADED
- v3.05 to Aminet.
-
- * Zoltan sent in a mod he made himself titled The Mysterious Land, at first
- I wasn't going to use it because I don't like listening to it "by itself"
- but now I am going to included it into the game because I think it will be
- ok music to listen to "in the game" while looking at pix of magic spells
- and fire breathing dragons and such. I like the composition of this mod,
- (its mysterious :) I just wish the instruments were higher quality.
- This mod was submitted in XPKSQSH format so only users with XPK.library
- installed will ever hear it.
-
- * Zoltan sent in another mod titled Land of Magic by Elvis. Its very nice
- sounding with excellent instruments but its very very short. It sounds
- like an "Artur Chlebek Mod" :) Maybe someone will lengthen it someday?
-
- * Sent the new JCsound fix to Robin and Zoltan. (I already sent it to
- Artur).
-
- ======================================================================
- * Xav sent in more gfx!
-
- Drain: The old Drain matches the opposite spell (Haste). But your new
- Drain looks better so I'm using it.
-
- Jann: Included into the game.
-
- Joker: I really like him! But he looks like a creature, not a magic spell.
- So I don't know what to do with this... We need 32x32 tiles for this then
- we could make him look like he is a pic on a playing card. That would be a
- perfect Joker. For this moment he goes into gfx/UnusedGfx/ while I decide
- what to do with him.
-
- Radioactive Land: I like this new version much better!
-
- Thundermare: It looks better but I'm not sure if this should be the new
- Thundermare or the new Iridium Horse? I guess I will wait till someone
- makes a new Iridium Horse then I will decide. :)
-
- Vitality: Wow! Both the new versions are very cool! I included this into
- the game and I hope I can think up a new spell to use the yellow-heart
- version! *think* *think* damn I can't think of anything... oh well...
- maybe someday.
-
- Wizard 7: I don't really like the Leg Movement. I added your version onto
- the Wizard 7 Screen. There are now 3 main versions on that screen: The
- James version, The Imbe version and the Xav version.
-
- Wizard 8: Auugh! We both did the same work! My version had some wrong
- color #32 which I fixed.
- I cut & pasted your tile 17 into my version.
- Rest of tiles: I don't know what to do... Maybe I should stick to coding
- from now on. :)
- ===========================================================================
-
- On 23-March-01, Joar Berntsen wrote:
- > i moved with a flying carpet into a pit south of the wizard, hoping i would
- > float over it, not!. then i did the same to a bat,, not! :)
- >
- > to me, the wizard is north of the pit i falled into, and still alive.,.???
-
- * BUG: If a mounted wizard moves into a pit then the wizard becomes "there
- but not there". He isn't there so he can't move and he can't be killed.
- But he is there so he can still cast spells. NOW FIXED.
-
- * BUG: If an Aerial Servant is on a scroll and flies 10 squares away into
- a pit, then the Aerial Servant dies as normal but the scroll he was
- standing on disappears also! Even though the scroll was nowhere near the
- pit! NOW FIXED.
-
- * BUG: If a creature is standing on a dead body and moves into a pit then
- the dead body disappears! NOW FIXED.
-
-
- March 24, 2001:
- * SLOW: Aerial Servants always take a couple of seconds to decide who to
- attack. I think this is due to the DangerousnessRating() routine being
- very very slow. It is filled with lots of redundant array bounds checking
- and uses lots of array indexes instead of pointers. I have now rewritten
- this so it should be at least 2x as fast now. NOW FIXED.
-
- * I speeded up RaiseDeadRating() in the same manner as
- DangerousnessRating();
-
- On 24-Mar-01, Robin Schmidt wrote:
- > You should teach the computer that sleeping creatures are not really worth
- > attacking. Situation: Vampire (sleeping) next to a Green Dragon (enemy),
- > both next to one of eight wizards who all play in the same team (thus making
- > the danger of someone calling Wake on the vampire void (if one can say
- > that?)). The wizard (upgraded with Sword of Sassenrath) attacked the
- > vampire, the dragon then killed the wizard. Ouch!
-
- NOW FIXED.
-
- * Implemented a table of CellAddress[] to store the address of the first
- byte of each cell on the board. This allows fast and easy lookup by my
- upcoming asm rendering/animation routines.
-
- March 25, 2001:
- Think about replacing the DrawCell(&NothingImage,cell) with a bunch of
- move.w's. Redrawing the line of sight on a large empty screen is VERY
- slow in non exploration mode! This will actually be very easy!
- Just copy the code from the cell highlighting !!! Wow!
- It will be SUPER FAST!
-
- Go through the program and actually do this!
- DrawCell(&NothingImage,cell); -> DrawBlankCell(cell);
- DrawCellShadow(&NothingImage,cell); -> DrawBlankCellShadow(cell);
-
- Disadvantages:
- 1. This routine is useless once terrain is implemented.
- 2. One more routine to upgrade into 256 colors mode.
-
- Advantages:
- 1. ReDrawCell(cell) will be greatly speeded up when used to unhighlight a
- bunch of blank cells.
- 2. The Animator task will be much faster when having to REDRAWALL==YES;
- Such as exiting an info panel in Exploration Mode.
-
- * IMPLEMENTED DrawBlankCell() and DrawBlankCellShadow()
-
- * TIMING TEST on my A3000 25Mhz 030:
- Doing 1000000 Nothing takes 48 frames.
- 36743 (36695) frames to DrawCell(&NothingImage,0); 27.2 images per frame
- 4399 ( 4351) frames to DrawBlankCell(0); 230 images per frame
-
- As usual my custom routine is 8.4x times faster than the OS-based routine.
-
- The _AMAZING_ thing is that once I have time to implement my asm cell
- rendering routines that I wrote 3 years ago, ALL gfx drawing will go almost
- as fast as the DrawBlankCell routine! The new routines will draw a pic of
- a monster almost as fast as a blank cell.
-
-
- * BIZARRE BUG: If you are playing a game in Exploration Mode and for some
- reason a requester should appear onto the game screen (for example a "Disk
- is Write Protected" requester) then you can cheat by moving the window
- around. It somehow _magically_ uncovers any stuff (creatures, scrolls,
- inanimate objects, anything) in the unexplored territory! Yet it doesn't
- mess up any gfx at all! It's totally bizarre! I always wondered how on
- Earth this was possible. Now I figured it out! It was all because when I
- set up the ShadowBoardRastPort I just copied the rastPort of the main board
- into it! This copied the layers information which caused the OS to provide
- this most unique and amazing behavior. I have now changed the code to just
- do an InitRastPort(ShadoBoardRastPort); so this is all NOW FIXED.
-
-
-
- * Included: Artur's Polski spell descriptions for the 16 new spells
- introduced after v3.04. His spell description translations are now
- complete except for the 6 new spells I added in the last couple of
- months.
-
- * Included Artur's new Vampire attack and death sounds. They are
- high-quality but very long. The attack sound is about 6 seconds long! I
- think people will complain about this. Oh well then they can make their
- own new Vampire attack sound or they can turn off the combat sounds.
-
- March 26th, 2001:
- * Included Robin's complete 366 Deutsch spell descriptions, latest
- Deutsch.catalog and Talklistsdir/Deutsch file.
-
- On 25-Mar-01, Robin Schmidt wrote:
-
- > AI: 1. I just saw a Basalt Golem shoot at a Shadow Dragon who has already
- > been stunned. This is stupid. There've been other targets in range.
- NOW FIXED.
-
-
- * STUPID: Basalt Golems shoot things that have 0 movement points. NOW FIXED.
- * STUPID: Spectators attack things that have 0 manuverability points.
- NOW FIXED.
-
- * STUPID: Spectators keep constantly attacking my Conwell's Cow Catapult
- even though it already has 0 maneuverability and they aren't hurting
- it at all! NOW FIXED.
-
- * STUPID: All creatures which attack only non-lethal stats (such as Maneuver,
- Move, Combat, Ranged Combat, Special Combat, all Recovery rates) will
- frequently make useless attacks against creatures whose stats are already
- as low as they can go! NOW FIXED.
-
- * I optimized the IsStupidAttack() and IsStupidShot() routines to speed them
- up. But then I had to add tons of new code to check for useless attacks
- so all in all it will be just as slow as before or even slower. I think
- this is why it takes so long for an Aerial Servant to decide who to attack;
- its because he must check nearly every square on the board if it is a
- stupid attack or not. Its a rather large hunk of code that must be
- executed for each sqare.
-
- * I added code to IsStupidAttack() and IsStupidShot()to check for and avoid
- useless healing attacks. Such as Hippocrates healing someone who already
- has MAX_LIFE. I've never seen such a thing happen, and in fact I think
- the other AI routines prevent this from ever happening... but the code is
- in there now just in case.
-
- March 27th, 2001:
- * PROBLEM: If you attack an enemy Hippocrates' Combat statistic it actually
- gets better! The Hippocrates becomes a better healer than ever before!
- NOW FIXED. See below.
-
- * PROBLEM: If you heal your Hippocrates' Combat statistic (for example
- shooting him with Aesculapius) then the Combat actually gets worse!
- It can even become positive so that Hippocrates becomes a fighter like
- everyone else! NOW FIXED. See below.
-
- I think the combat routine needs to be modified so that if a creature with
- positive combat attacks the Ranged Combat of another creature and that
- creature has negative Ranged Combat then the Ranged Combat should NOT be
- lowered further but in fact should be raised toward 0, thus damaging that
- creature's healing ability.
-
- * CHANGED: Now if you attack someone's Combat, Special Combat or Ranged
- Combat you make their stat move towards 0. You do NOT mathematically
- lower it.
-
- I think several people had asked for the above change over the years
- (I'm not sure, I can't remember.) So hopefully everyone will be happy now.
- :)
-
-
- On 26-Mar-01, Robin Schmidt wrote:
-
- > On 25-Mar-01, Robin Schmidt wrote:
- >
- > ->> How many emails did I send you today? :) Anyway: I finished (!) the
- > ->> translation of the talklists today,
- >
- > -> I thought Deutschian Grammar was too complicated for talklists? :)
- >
- > Well, as I told you it was like impossible to just translate the talklists
- > to German. But I totally re-wrote/re-arrangend the lists, so that now there
- > is a perfect German translation. This meant to write some lists twice or
- > even thrice to solve some problems with singular/plural and
- > male/female/neutral versions of one and the same word. I'm so great!
- >
- > ->> but there is something wrong. It worked
- > ->> all okay for some turns and then crashed (Guru). I think there is a loop
- > ->> somewhere. You told me of a program (arexx?) you have to check/build
- > ->> talklist sentences. I haven't got this. Could you send it to me, please?
- >
- > -> Ok I attached the Arexx scripts for checking talklists.
- > -> Please let me know if these help you any.
- >
- > Well, they did. There wher serveral 'Can't find list xxx' errors due to
- > typing mistakes. I hope this caused the crash, but I can't be sure of
- > course. But when I used the GenerateText.rexx everything looked fine.
- >
- > I had to change the catalog again in order to translate the talklist
- > correctly. I hope this works.
- >
- > Attached are the spells, the catalog and the talklist. You can append them
- > to your verion.
- >
- > L A T E R:
- > I had another try with the talklists. Chaos still crashes sometimes when the
- > computer wizards talk. CheckTalkLists.rexx cannot find anything, so it can't
- > be an infinite loop. Perhaps you have more luck and find something.
-
- What the bug was: I had a string on the stack that was 40 bytes long.
- I remember making it only 40 bytes when I first coded the routine because I
- thought I was going to make the routine recursive. Thankfully I was smart
- enough to make it use a loop instead of recursion. But I didn't think to
- increase the size of that string to something really huge once I prevented
- recursion.
-
- The string is used to hold the _name_ of a list. If you had any listnames
- longer than 39 chars then some other stuff on the stack would get
- overwritten. Like for instance the other variables and the return address.
- Upon executing the RTS instruction *BOOM*.
-
- The Deutsch talklists file has 2 lists longer than 40 chars.
-
- So I fixed it by making the maximum length of a listname be 256 chars AND I
- put error checking code in to return an error if any listname is over 256
- chars. NOW FIXED.
-
- * NOTE ABOUT TALKLISTS: You should try to make sure that your generated
- sentences cannot go over about 220 chars because that is about the
- realistic maximum amount of text that will fit onto the bottom of the
- screen. However if you accidentally exceed this, no harm will be done
- because the internal buffer is 512 bytes long for the entire sentence.
- If you somehow generate a sentence longer than 512 bytes then *BOOM*.
-
-
- On 27-Mar-01, xavnet wrote:
- > News:
- > - Virtue: you're going to have a shock! :)
- > It 's a symbol of a virtue... I think... But nowadays... I'm not sure...
- > :-D
- >
- > - Vampire : new version.
- >
- > - Fire Shield : updated
- >
- > - Earthquake Shield : updated
- >
- > - Discard : updated. I add a trash and I enhanced the costume.
- >
- > - Cat Lord : updated.
-
- * Included: Xav's new gfx:
- Cat Lord
- Discard
- Earthquake Shield (Nice Shading!)
- Fire Shield (Nice Shading)
- Vampire (I always liked the old Vampire. He's not perfect but I like
- gfx with waving cloaks :) Old Vampire's legs could have been better. But
- the new Xav Vampire is a better animation and design so I'm using it.)
- Virtue: HeheheheheHAHAHAHAHA OWW! I'M DYING LAUGHING! :-D
-
-
- * Included: Imbe's new gfx:
- Falcon (He added 1 frame) There was a line of color #32 in the corpse
- tile which I removed. I antialiased all frames a little bit. The Falcon
- is Awesome!
-
- Fly: I antialiased it and improved the back wing. If this were an
- animation it would make a FANTASTIC Pixie creature!
-
- Generator: COWABUNGA! Nice animation! NOTE to Imbe: please press the
- "g" key to turn on the grid (16x16) when you move the old animation around
- on the screen. That way it is always placed correctly. Thank you. :)
-
- Ack! I just loaded the Generator into the game and some of the tiles are
- not placed correctly! Many gfx bugs in this! Please please please
- _always_ turn on the Grid with the "g" key in Dpaint when moving and
- placing tiles! The Grid function Rules!
-
- 1 hour later: The new Fixed Generator arrived and I included it. Thank
- you for the fast response. :)
-
- Ghast: Wow, this is weird looking. I antialised it and made it look much
- better but I think Xav needs to examine this gfx. Be sure to watch it as
- an actual animation in the game. It doesn't look like a Ghast to me. It
- looks like some sort of strange alien creature or sea creature.
-
- Ghoul: I don't know what to do about antialiasing this. (???) I leave
- it to the professional. :) The red dots animation could be somehow
- better.
-
- Giant Rat: I antialiased the tail.
-
-
- * Imbe New Cell Effects:
- Attack: Its very nice! But I already made a new attack cell effect out
- of Xav's animation + my numbers. So we need to think up a reason to use
- this NEW Imbe attack fx. Does anyone have any ideas?
- For healing attacks?
- For poisoning attacks?
- For attacks against statistics other than life?
- ???
-
- Twirl: WAHOO!!!! Finally a new Twirl gfx!!!! I TOTALLY _HATE_ the old
- Twirl cell effect! The old Twirl gfx hurt my eyes! This new one is much
- better! But it could be better still. I quickly single-pixel
- antialiased it but it really needs double-pixel antialiazation.
-
- I just tested it in the game and it looks REALLY COOL!!!!!!!!!
-
- NOTE TO EVERYONE: Cell Effects can use LOTS of frames, like 50 or 100 or
- whatever. I can _EASILY_ play cell effects animations at 25 or 50 fps so
- we can use _REALLY_ detailed animations on these if you want to make them.
-
-
-
- * Imbe gfx not included (yet):
- Flesh to Stone: I liked the current Flesh to Stone better.
-
- Free All: Nice Graphic! But if I use it, it would have to be for "Free"
- not "Free All" I think. I think Free and Free All should be graphically
- related. I don't know what to do about this one. I am putting it in
- UnusedGfx/Imbe until we figure something out.
-
-
- Floating Eye:
- Things I like: Its animated.
-
- Things I like about the original floating eye: It has a Pupil. It is
- bloodshot.
-
- I don't know what to do about the Floating Eye gfx. I will put it into
- UnusedGfx/Imbe/ for now.
-
-
-
- March 28, 2001:
- Imbe Writes:
- > many times when im in the spell selection, i dont feel I have an overview of
- > my spells. If they were more organized, it would be much more comfortable.
- > examples:
- >
- > m=growth, misc cc or cm or cs cc or cm
- > s=status spells cc cm um cu cs
- > c=creatures uu cm cs uu cs
- > u=undeads uu cm um uu us
- > mm us cs mm us
- > mm us um ss us
- > ss us cs ss us
- > ss us um ss ms
- >
- > or u could just display them by order, e: c-u-s-m above.
- >
- > I dont know if its the actual number of spells, but u get the idea.
-
- If I implement this, I will have a "Sort" button that you click on and it
- will sort your list of displayed spells for you. This way you will see the
- spells in their actual order (this is very important when you stop casting
- spells and get lots of bonus spells because the ones on the bottom get
- pushed off.) But if you click the "Sort" button then you will see them in
- the sorted order.
-
- Ok, so now I could easily implement this... BUT... what if someone doesn't
- like this particular sorting methodology? What if they want undeads listed
- first, then magic spells, then all other creatures?
-
- Or what if they want "weird attackers" like Mind Flayers and Juju Zombies
- listed first? Or any other weird things?
-
- This would mean we would need a very fancy GUI system so that each user
- could set their _own_ personal preferences for how the list is sorted.
- Later on this GUI can be extended to provide support for customizing what
- is shown at the bottom of the screen. It doesn't have to say "Unicorn
- (Life 10)" It could say "Unicorn life 10, combat 15" (in different colors)
- or something. There are an infinite number of ways to customize how things
- look. And I have _no_ ideas how to code the GUIs for them.
-
- As everyone knows, I _hate_ programming GUIs because there are an infinite
- number of ways to design them, and many GUIs are just as good as many other
- GUIs but they look totally different. Some things are factually easier,
- but a lot of it is just subjective opinion style.
-
- So this now brings up something I've been thinking about for a long long
- time: Allowing Chaos to be extendible via external code modules. These
- external programs could be coded in any lanugage: C, Asm, Blitz Basic 2,
- Modula 2, E, Arexx, maybe even AMOS (oh no!). You could even use MUI or
- Datatypes if you wanted.
-
- So we would have to decide this question:
- Should the external programs be loaded via "LoadSeg()" or should they be
- run as a cli command? (Or should there be support for both options?)
-
- What functions within Chaos would you need access to in order to make your
- coding easier?
-
- What variables would you need access to?
-
- On 28-Mar-01, Robin Schmidt wrote:
- > Greetings, Master Conwell!
- >
- > I did it all ... I meditated ... I didn't eat or drink for a week ... I
- > hadn't had sex for a year and a day ... I didn't curse or swear ... I
- > concentrated all my powers. Then when I was ready I opened the Dark Gate and
- > passed it ... I walked through fire and ice ... faced storms and floods ...
- > I subdued the One ... I prepared myself. At last I started Chaos 3.11 ... it
- > looked all fine, too fine for my suspicious eyes ... I started to search ...
- > I found some things you should improve ...
-
- Wow! You really should think about writing more spell descriptions with a
- writing style like that!
-
-
- > 1. The Goblin Bomb looks ugly. Why didn't you include my great (?)
- > explosion?
-
- I told you I've been overloaded with coding requests and gfx requests and
- AI requests and shopping for an Apollo 060 and etc. etc. So I have not
- programmed in your 3x3 tiles thing yet. I figured I could do it when you
- figured out how to generate twice as many frames out of the explosion.
-
- I work on Chaos for 8 hours a day every day! But I have 32 hours of work
- that need to be done each day! So I fall behind by 24 hours every day. :(
-
- > 2.4. I think, independant
- > generators shouldn't create Magic Carpets as well as Grim Reapers.
-
- I will think about hacking in some code to stop Generators from producing
- Grim Reapers. It depends on what others think about this.
-
- I've only had 1 game where a generator produced a Grim Reaper. It was very
- interesting. On the one hand the Grim Reaper damaged a lot of independent
- creatures and killed some too. But it also killed a LOT of pieces of wall
- in the dungeon. This allowed all the other independent creatures to move
- into my area and attack me! So it really all sort of balanced out.
-
- The Grim Reaper also kept stealing my bonus spells. It was very annoying.
- It caused me a lot of damage and slowed down my invasion killed some of my
- Lions and I was very glad when I was _finally_ able to kill it.
-
- > That
- > makes no sense for the independants. Or can make Agents (Necromancer, etc.)
- > use of the carpet? Nice idea anyway... :)
-
- Nice idea... but a HUGE ridiculously large amount of coding and AI work so
- it won't happen this year.
-
-
- On 28-Mar-01, xavnet wrote:
- > Hi James!
- >
- > News:
- > - Vampire
- > I wanted to morph it into a bat... So I used the Morph feature of DPaint 5,
- > but I was disappointed by the result... So I had to work frame by frame on
- > this morph anim.
- > You'll find the 2 versions in the file.
-
- Morphing works better with Explosions. :)
-
- This is a REALLY COOL animation!!!!!!!
-
-
- > - Iridium Horse : new version.
-
- Ok, I've looked at the Iridium Horse and Thundermare and etc.
-
- I included your Iridium Horse as the new Iridium Horse.
-
- I will take your Thundermare graphic and remove the horizontal line
- animation on its body and then that will be the new Thundermare. DONE.
-
- There will be a system to the gfx:
- A horse-alike creature which is undead (or can attack undeads) gets a
- horizontal line animation on its body. All other horses just look normal.
-
- Since Thundermares aren't undead and they can't attack undeads then they
- don't have that body animation.
-
-
- Iridium Horses aren't undead but they can attack undeads so they get a not
- very bright animation on their body. This works out great!
-
-
-
- On 28-Mar-01, Robin Schmidt wrote:
-
- > 2. The sentences like "Gandalf's Vulture munches on some Pig meat. Life +4"
- > are not correctly displayed when you play in German. This is due to the fact
- > that I put some of those '%3s' from the catalog-file to the talklist-file to
- > ensure a correct translation. Can you do anything about that or do I have to
- > make a simple one version translation that says 'Your creature ate some
- > meat. Life increased.' everytime?
-
- Wow! You put parameters into the talklists!!! That was very clever!
-
- The reason it wasn't working for you was because I was plugging in the
- parameters first, then calling ReplaceLists(). But I can almost just as
- easily call ReplaceLists() first and THEN plug in the paramters. But I
- will have to change the code on each individual print statement for it to
- start working correctly.
-
- So leave your talklists and catalogs as they are. They are very good. I
- will fix the program to allow for this amazing new grammatical construct.
-
- OK, I now hacked in special code for the 2 lines in the catalog file that
- need to have "parameters in talklists" capability. Line 206 and 49. If
- this works ok and you need more catalog lines with this capability then
- maybe I'll make a new system that automatically allows talklists to work on
- ANY and EVERY catalog string. Would that help you any?
-
-
- > 3. What is the difference between Combat and Chainsaw (except the sound :) ?
-
- None. (except Chainsaw is more satisfying :)
-
- Combat doesn't need betatesting but Chainsaw does. Does that count as a
- difference? :)
-
-
- > 4. When a computer wizard casts Tribal Dance the game waits for a
- > mouse-click. There is no sound in this time. I deactivated speech.
-
- The only thing I can figure is that you just didn't have enough chipram
- available to play the music. So I added some error checking code. Now if
- it can't play the mod for some reason, an error message will be printed.
-
- > 6. Is there anything like 'lethal strikes' or something like that? I had a
- > Vulture with combat 5 attacking a Derro with 19 life. It killed the Derro
- > with one strike!?
-
- Yes, but only if impurities are turned on.
-
- * I sent the help files, the latest .catalog file and the 8 new spell
- descriptions files to FD for translation and proofreading.
-
-
- March 29, 2001:
- * I recieved FD's translated help files, catalog file and all 8 new spell
- descriptions! In only 24 hours! Frédéric Delacroix earns "Fastest
- Translator in the West" award! (again)
-
- Frederic Delacroix wrote:
- > Translating is easy and relaxing :-)
-
- That's what I keep telling the other translators... but they don't believe
- me for some reason.
-
-
- * I spent some hours trying to figure out what is causing Robin's sound
- bugs. He reports the Ghost sound still gets stuck in a loop sometimes.
- I found nothing useful so far. :(
-
- * Included Xav's new Abath gfx.
-
- On 29-Mar-01, Joar Berntsen wrote:
- >
- > this is my gfx dir at this time, but it stops at reveal or the last
- > celleffect and displays a yellow "out of memory" message, then quits,
- >
- > i know it doesnt have anything to do with my wierd attack gfx.
- > and there are no patches in the system.
- >
- > because of this, i cant play chaos anymore :(
-
- OOPS! Sorry! I forgot to include the "wrap down to the next line" code
- when processing CellEffects in IFF files. NOW FIXED.
-
- I am compiling you a new version now, but it takes over an hour to compile
- Chaos these days.
-
- Attached: V3.13 main executable.
-
-
- On 29-Mar-01, Robin Schmidt wrote:
-
- > A wizard just cast Chainsaw twice on one creature?!?
-
- NOW FIXED.
-
-
- > Why do creatures with combat 0 attack?
-
- The way of the warrior is not easy. It requires much practice. With
- enough practice a creature can improve its attack ability.
-
-
- > Independant creatures, that get discovered by killing a growth, can move in
- > the same turn, can't they? But when their position is above the other
- > independant creature that discovered it, it can't move.
-
- Yes that is true. You have discovered another game secret.
-
-
- > Dragons scream when you touch them with a chainsaw!!! NIIICE!
-
- Hehehe }:>
-
-
-
- Imbe inscribed the following scroll on March 29, 2001:
- > doublecatlord: i chose catlord, and i have double, but i dont seem to get
- > permission to cast catlord twice. why not, or is it a bug?
-
- "There can be only 1!" (tm) :) Cat Lord at a time. It says so in the
- rules somewhere. :)
-
-
- > mintgen: the generator near the middel gets in mint condition, allthough i
- > have attacked it with my cobra so it has no recover left, and attacked with
- > eceryone else in the area.
-
- "Real" Generators are special. They are magical and have super powers.
- They have infinite healing abilities and don't use their Life Recovery
- Rate. In order to kill a Real Generator's Life Force you must kill all 63
- points in 1 turn. That is part of the strategy of the game. :)
-
-
- March 30, 2001:
- * I spent all day reading the RKRMs over and over and reading the DevCD
- over and over and conducting experiments to try to make JCsound crash.
- No matter what I did, I couldn't make it crash.
- Here are some things I tried:
-
- Theory 1:
- JCsound is loading from the RAM: disk and some other program kicks in
- and writes or reads from the RAM: disk at the same time. This causes a
- crash. This theory is mostly disproven, see Experiment 1.
-
- Experiment 1:
- I had a loop of JCsound playing over and over again.
- I then went to CED and continuously wrote out large files to the ram disk.
- No crashes, no problems.
-
- Lots of stuff deleted...
-
- March 31, 2001:
- * Included Robin's Deutsch help files.
- * Robin sent in a bunch of cell effects animations! Some of them are 100
- tiles long! WOW! But I'm in the middle of coding on JCsound so I will
- have to look at them and/or program them in later.
-
- * Imbe sent in a new Vulture but I haven't had time to decide if I should
- use it as a Vulture or as some other flying creature?
- * Imbe sent in new Goblin and Gobln Bomb gfx which I put into
- gfx/UnusedGfx/
-
-
- ********************************************************************
- More work on JCsound
- ********************************************************************
- Test my combat ghost killing thousands of things! over and over! To see if
- it crashes. No crashes!
-
- The GetMsg() code looks suspicious. NO! I send 1 message and I get 1
- message! That is all!!!!
-
-
- Try to investigate speech routines stack variables and things.
- There are no stack based variables in the speech routines! How could this
- be messing up!?!?
-
- Check syntax of DeletePort! Its ok.
-
- 6. Make a test program that reads and writes files to/from the RAM: disk
- while repeatedly playing JCsound samples FROM the RAM: disk.
- I tried this and nothing bad happened, although the left and right
- channels become desynchronized.
-
- 7. Set the buffers on the drive to 0! Then try to make it lock up!
- IT NEVER LOCKS UP! But it does cause the channels to become
- desynchronized!
-
- Compiling Optimization Stuff------------------------
- JCsound is currently 18040 bytes. It is being compiled with data=far for
- some unknown reason?
-
- * I recompiled with code=near
- code=near made no difference because it defaults to code=near anyway.
-
- * I recompiled with data=near
- data=near made it 16168 bytes! I just saved 1872 bytes! Over 10% size
- reduction!
-
- * I recompiled with parameters=register
- parameters=register doesn't work because I lost my minrexx.c file somehow
- Ok I redownloaded minrexx.c from Aminet.
- parameters=register made it 15088 bytes.
- TOTAL REDUCTION = 2952 bytes (16%!)
-
- My old minrexx.o was 1972 bytes.
- My new minrexx.o is 1620 bytes.
-
- I had to make some changes to Arexx.c and minrexx.c to get them to compile
- with the OS 3.1 include files.
- ----------------------------------------------------------------------------
- END JCsound 1.2
-
- BEGIN JCsound 1.3
- Copy everything over to sc:JCsound1.3/ in case I mess something up.
-
- * PROBLEM: When playing a sample with the -2 option the startup code is
- doing this:
- 1. Allocate 30k chipram buffer as left buffer 1
- 2. Allocate 30k chipram buffer as right buffer 1
- 3. Free right buffer 1 because this is a MONO sample and there is only 1
- sound going out to both speakers.
- 4. Allocate 30k chipram buffer as left buffer 2
- 5. Allocate 30k chipram buffer as right buffer 2
- 6. Free right buffer 2 because this is a MONO sample and there is only 1
- sound going out to both speakers.
- Needless to say this is wasteful and makes it slower for JCsound to get
- started. So I have now reduced it to:
- 1. Allocate 30k chipram buffer as left buffer 1
- 2. Allocate 30k chipram buffer as left buffer 2
- NOW FIXED.
-
-
- * PROBLEM: Sometimes when playing sound with the -2 option (The -2 option
- is almost always used when playing sounds in Chaos) the sound channels
- start at different times. They are unsynchronized. This causes no real
- harm but I think Artur complained about it so...
- * I spent some hours studying the RKRMs and the Amiga C Manual and I
- finally figured out how to start 2 channels playing simultaneously.
- IF the RKRMs are correct and IF the Amiga OS audio.device functions as
- specified then it should now be IMPOSSIBLE for the channels to become
- desynchronized. NOW FIXED.
-
- Actually it is not TOTALLY IMPOSSIBLE for the channels to become
- desynchronized, all you would have to do is to disable multitasking for
- around 1.2 seconds (assuming 30k buffers) then things might get
- desynchronized. But 1.2 seconds is such an incredibly long time to disable
- multitasking that I'm not even going to worry about it.
-
- But if the buffers were set to only 4K then multitasking would need to be
- disabled for only about 1/7th of a second to possibly cause things to
- become desynchronized.
-
- Actually the books don't say anything about keeping double-buffering
- synchronized. You can use the OS to START 2 sounds playing at the same
- time and then you just keep queueing up more WRITE commands but it never
- says there is any guarantee that the future WRITE commands will be executed
- simultaneously.
-
- The audio.device docs clearly state that you cannot issue 1 write command
- to multiple channels.
-
- So what I am trying to say is that if you were to play a 10 minute long
- sample then maybe the 2 sides of sound would slowly start getting more and
- more desynchronized? I donno. If you try this under a heavy cpu and heavy
- hard drive access load then please let me know what happens.
-
- If the audio.device is programmed correctly then there will be NO problems!
-
- April 1, 2001:
- * I made some more optimizations to save 128 bytes of code size.
-
- * I changed the priority setting of JCsound to the first line of code so
- that, under a heavy multitasking load it will get started much faster.
-
- BEGIN: JCsound v1.4
- * I think there was a bug in the stereo playback. NOW FIXED.
-
- * Implemented perfect synchronization code on the stereo samples!
-
-
- Does anyone ever notice a delay when loading a digital sound effect?
- The OS has to load the JCsound program from disk, relocate it, run it, the
- program then must open libraries and devices, allocate memory,
- blahblahblah, it is quite a large amount of overhead. But with so many
- people using 040 and 060 processors these days, I'm thinking nobody has
- even noticed it. To my mind, the sounds are not instantaneous like they
- should be. But on the other hand they are ok and I have only a 25Mhz 030.
-
- If you feel that the sound effects loading should be speeded up there are 2
- main things I could do:
- Option A:
- Rewrite JCsound be pure and residentable.
-
- Option B:
- Rewrite JCsound to load into memory just once and get ready for accepting
- commands. Actually I had always planned to do this option years ago. But
- I don't understand exactly how to send commands to the JCsound program.
- I guess I need to force myself to read more manuals and stuff.
-
-
- * I Sent Zoltan the 16 new spell descriptions + the 8 new spell descriptions
- + the help files for translation.
-
- * I only sent Artur the 16 new spell descriptions. I Still need to send
- Artur the 8 new spell descriptions and the help files!
-
- IDEA:
- Make JCsound revert to 15k buffers if the 30k allocations fail. (?)
- If that fails, go to 4k.
- Would this be useful? Do people run out of chipram, causing the sound
- effects to fail?
-
-
- April 2, 2001: Imbe writes:
- > i wondered if u could make a save with all creatures,undeads and growths
- > packed in the board, because theoretically, it should fit, 16*16=256
- > and it is over a 100 non living spells, isnt there? armour,magical attack
- > and such.
-
- > i know it could take a while to create it, but i would be able to see my new
- > drawings immediately, instead of having to play(wich i want ofcourse :) ,
- > but i like creativity more) or renaming creatures.
-
- * Imbe wants a level with every single monster on it. I had planned to do
- this for Xav many months ago but I just never got around to it and Xav
- never asked for such a thing soo...
- I hacked in some code today:
- Make a quick loop attached to the Z key to insert every ID that is a
- creature, alternating between player 1 and player 8.
-
- * I made another level with all the growths in large blocks for Imbe.
-
- * Robin sent in a spell file and description and sound effect for the
- Soulsucker. The spell file and sound effect are good. I think I liked the
- description given in the Email better than this description though. When I
- implement this I will need to go back and read that Email. (search for
- soulsucker).
-
- * Problem: My "Chaos" sound sample in Mod.ChaosTheme13 sounds pretty dorky.
- Robin processed the sample and now it sounds sorta cool. Its very evil
- sounding! Sounds almost demonic. Augh! He's revealed my true nature!
- }:>
-
-
- April 3, 2001:
- Try the GetMsg() thing before deleting the ports!
- Do the WriteMsg() thing for how many messages were left!
-
- Try opening the audio.device ONLY ONCE for both channels. (?) Look in that
- Amiga programming book! That is how they did it!
-
- * Many many many experiments and rewrites deleted. They all crashed one
- way or another.
-
- April 4, 2001:
- After countless hours of trying millions of different coding techniques I
- am finally giving up on the "perfect synchronization code". The
- synchronization itself sounds great and works great. But then when I close
- the audio.device *boom*
-
- I talked to a lot of programmers and they all said audio.device sux.
-
- They told me the only thing audio.device is good for is to allocate the
- channels so that you can bang on Paula.
-
- I spent a few more hours trying to recreate v1.3 of JCsound and now
- finally, here it is. A 100% working version. It has no "perfect
- synchronization code". It is optimized a bit over 1.0 and 1.01 in that
- it does less memory allocations.
-
- This will be the sound playing routine for a long time to come unless you
- can find serious bugs in it (or you can find a better playback routine
- somewhere).
-
- I can't believe I just wasted SOOOO MUCH time on this!
-
- Is there sometimes a delay between the time the sound _should_ have started
- and the time that it actually starts?
-
- If so there are various things I could to speed up its loading and playing:
- A. I could eliminate all the arexx stuff. That should make it about 1/3
- smaller and faster to get going.
- B. I could rewrite the whole thing and make it load into memory just once,
- then it would sit there and await commands. I don't know how I would
- beam the commands to it yet... Either with PutMsg() or with Arexx.
-
- AAAAUUGGH!!! It doesn't actually work! JCsound now works perfectly 100%
- of the time on some samples and fails 100% of the time on other samples!
-
- April 5, 2001:
- Ok, I finally figured out the bug in audio.device! It took 50 hours of
- hacking and slashing and trial and error but I think I _finally_ have a
- 100% version of JCsound that is rock solid and won't ever crash.
-
- NOTE: the other versions of JCsound weren't crashing on their own, it was
- actually audio.device going berserk and corrupting memory.
-
- You _must_ delete all versions of JCsound v1.3 or higher that you already
- have. They are TOTAL TRASH.
-
- I _recommend_ that you delete all other versions of JCsound that you have.
-
- I went back to JCsound v1.2 and manufactured a new v1.3 from it. This is
- the new 100% version. I took out all perfect dual-channel synchronization
- code to keep the program simple for now. Once this new version passes
- beta-testing I will _try_ to put the dual-channel synchronization code back
- in.
-
- JCsound v1.3 attached.
-
- How to install a new JCsound:
- 1. If Chaos is running then Quit chaos completely.
- I know it can be traumatic to have to quit the game but you can do it
- if you try really hard. :-D
-
- 2. Unlha the JCsound file
-
- 3. Copy the JCsound executable into your chaos/c/ dir
-
- Tada! That's all there is to it! :)
-
- * END OF JCsound V1.3
-
- April 6th, 2001:
- * I carefully added 1 line of code at a time, recompiled and tested
- repeatedly, over and over, until I had all the code in to guarantee
- perfectly synchronized mono x2 and stereo sound sample playback.
- Everything seems to work perfectly!!!
-
- * I then went back and redid all the FreeMem's to go in perfect reverse
- order. This will allegedly reduce memory fragmentation.
-
- * I tested JCsound a zillion times and it always works for me now.
-
- Please let me know if you have any problems with JCsound V1.4 and if so,
- what exactly is happening.
-
- * END OF JCsound V1.4
-
- I am now seriously considering removing all the Arexx code from JCsound
- (does anyone care? What real purpose does it serve?). If I did that then
- I think I could easily rewrite JCsound to be Resident and Pure! Then there
- would be 0 load time for JCsound and all sound samples should happen
- instantaneously!
-
- Questions: Why does Visage not work on my A1200T 060 + CGFX + OS3.9?
-
- It works perfectly on my A3000 but it says it "can't find mode ?" when I type
- visage df0:#? mode ?
- in the shell. It is as if OS 3.9 has a bug in the ReadArgs() function.
-
- It doesn't bring up the ScreenMode requester and it always tries to display
- the pix in gfx modes that my monitor doesn't support, so I can't see
- anything or I see a bunch of garbage.
-
-
- Does DiskSalv work on hard drives with the new FFS (bigger than 4gig
- drives)? Or will I blow up my 5 gig hard drive if I try to run it?
-
- What happened to Multiview in OS 3.9? When I type Multiview in the shell
- it can't find it. Did it get renamed or did the previous owner delete it?
-
- * Played around with my new used A1200T OS 3.9 to try to become familiar
- with it. Right this second I'm running a 640x400x64 colors Workbench in
- 73Hz on the flickerfixer. It looks very beautiful :)
- The new GlowIcons supplied with OS 3.9 are very cool!
- The hard drive in the A1200T surely makes a lot of noise...
-
- * Spent a few hours on IRC talking about gfx cards, gfx drivers (I talked
- to a person who designs CGFX drivers). I asked around if I could use one
- of my REAL Amiga keyboards instead of the lame PC keyboard, the answer was
- "probably yes". Voodoo3 is the absolute best driver/gfxcard combo
- available on Amiga right now. Voodoo4 and Voodoo5 drivers are crap
- because 3dfx never published the docs for them!
-
-
- April 7, 2001:
- * Included Xav's wild new Ghoul! Its an improved, colorized, antialiased
- version of Imbe's Ghoul.
-
- Imbe writes this idea:
- recently, i played a very long game, and the spell list were burned away.
- and i saw that the cpu wizards reached for the apple trees, and i did 2.
- when i got a new spell, i got very exited :) . but not when i had used
- it :( ,so i thought u could implement that a new apple tree or castle/temple
- were created when no other means of meditation were available.
- OR make a new spell that sets the wizard in a trance(meditation) and will
- gain a new spell in 2-3 turns. and the spell is only given when the spell
- list is empty.
-
- * Included Imbe's new gfx:
- Falcon (it moves up and down very smoothly)
- Golden Dragon (I antialiased it some more)
- Gravity Sphere (What is it? It looks nothing like a sphere. :) But it
- looks better than the old gfx so I'm using it. I antialiased it.)
- Grizzly Bear: He added a frame and changed some frames. (There was a bug:
- a line of hard black color #32 in the corpse. Now Fixed.)
- Ok, I watched the Grizzly Bear in the game and this animation still needs
- some work, it jumps badly in one spot. It needs 1 more frame between the
- last frame and the next-to-last frame.
-
- * I put these Imbe gfx into unused gfx:
- Goblin and Goblin Bomb: They have more frames of animation so I might
- use them.. I donno. But I like the colors of the old Goblins... so I am
- thinking of using these new Goblins as completely new creatures.
-
- Gooey Blob: It looks good but I like the old Gooey Blob. I have been
- planning a new growth. I can use this one for the new growth.
-
- Gorilla: I want to use this one as some sort of extra mean Gorilla.
-
- Vulture: I am thinking of using this as the Pterodactyl. Perhaps with
- more grayish colors.
-
- * MORE audio.device strangeness. (Letter to FD)
-
- What is going on? I thought the music system allocated the sound
- channels at max priority!????
-
- Yet everytime I write a new email in YAM while the music is playing and
- I double-click on someone's name it makes a beep! It steals a channel from
- the music system! Isn't this supposed to be impossible!?!?
-
- This freaks everything out. After this happens the music sounds strange
- and if I play JCsound after this happens it goes crazy... but it hasn't
- crashed yet. Everything is bonked out.
-
- Can you set the music system to allocate all 4 channels at MAX priority so
- that they cannot be stolen? Merci Danke Thank you Muchas Gracias :)
-
-
- * I trimmed down the Generator gfx to only go through each color once.
- * I double antialiased Imbe's Twirl effect and now it looks better.
-
- * BUG! THE SPELLS GADGET IS BROKEN! Now matter how many spells you say you
- want, you always get 99. I wanted to play a quick game with only 10 spells
- and I noticed this! How long has it been like this? Ever since I added that
- code to put your bonus spells at the top of your list.
- So its been broken since December 31, 2000. NOW FIXED.
-
- * BUG: Play an exploration game as player 1 against a computer player 8.
- Now load a game of a human player 8 vs. a computer player 1. You will
- see the position of the enemy Player 1 for a second in the beginning!
- This is cheating! NOW FIXED!
-
-
- Imbe Writes:
-
- > Bugs:
- >trytoshootinradioactive:
- >i tried to shoot at radioactive with my elf, and he died (he's laying next
- > to my other elf), try to shoot with the other elf and you'll see.
-
- That is not a bug. That is a rule of the game. It does seem strange to me
- but it does provide a risk to shooting unexplored squares.
-
-
- > beforetwirlbytopguyinhvite:
- > i chose alliance and the jcsound must have crashed again by the top
- > hvite wizard.
-
- What does "hvite" mean?
-
- Jeg tudok nei Norsk. English takka du. :)
-
-
- Thank you for the sound bug report. I couldn't duplicate the bug so I
- can't fix it. It is probably just another bug in audio.device.
- audio.device sux! :(
-
- April 8, 2001:
- * FIXED some stupid bugs in the AI.
-
- April 9, 2001:
-
- Mod.ChaosTheme62 caused some enforcer hits when it started.
- Last line of WriteText() function (Text (rport, (char *)text, strlen(text));
- Called by WriteNearBottom() (last line)
- Called by Chaos.c GetSpellSelection() (line 3773)
-
- The ChaosPearl.font in memory was overwritten with part of the
- XPKSQSH.library!!!! I know this because I could read the version info of
- XPKSQSH inside the font struct. The whole font struct was mangulated.
-
- I tried several times to duplicate this bug without playing that mod. I
- couldn't make the bug happen again. So I think this means it is a 90%
- chance that the bug is in XPKMaster.library.
-
- * Resaved Mod.ChaosTheme61 from XPKSQSH to normal uncompressed format.
-
-
- April 10-12, 2001:
- Spent many hours reading faqs and readme files about various pieces of
- hardware and software on the A1200T. Fiddled around with many MUI
- settings.
-
-
- Friday the 13th, April 13, 2001:
- * Included Artur's 8 new polski spell descriptions.
-
- April 14, 2001:
- On 14-Apr-01, Robin Schmidt wrote:
- > Hi!
- >
- > I don't know whether you fixed /this/:
- >
- > /My/ Magic Carpet was occupied by an allied wizard.
-
- In the current version it is impossible for Wizards to occupy allied Magic
- Carpets. But once I send you the new version you can test it just to be
- sure. :)
-
- > When I moved the Carpet,
- > I saw, that the 'dismount D' was enabled, so I thought: 'Cool, now I can
- > kick this wizard from my carpet and use it for myself!' But when I
- > dismounted, *not* the other wizard appeared, but */mine/* again! So I
- > replicated my wizard!?!
- >
- > I'm not sure what will happen next turn...
- >
- > The Carpet stayed occupied, but at least I could create new wizards each
- > turn! :)
- >
- > You said, you fixed all Magic Carpet bugs in your version that you're going
- > to send me ASAP. But this one seemed to me so very special, I just HAD to
- > tell you about it! :)
-
- Hehehe, it does sound very funny! :)
-
- * Included Artur's Polski help files.
-
-
- April 15, 2001:
- * I set up a parnet network between the A3000 and the A1200T.
- First I installed Parbench31.lha from aminet but that was crap because it
- kept generating enforcer hits from location 32 and it was slow.
- So I downloaded and installed parnet.device 2.1 and now everything works
- great!
-
- Timing test 1
- I copied games:devcd/AmigaDeveloperCD_1.1.lzx to t: (20173265 bytes)
- Games: had only 30 buffers. T: was in the RAM: disk as usual.
- It took 415 seconds = 48610 bytes per second.
-
- copy the same file as above but this time games: had 530 buffers.
- SAME SPEED 415 seconds.
-
- copy games:devcd/AmigaDeveloperCD_1.1.lzx to work:
- 421 seconds. (Work: had 450 buffers) 47917 bytes per second.
-
- * I downloaded bustest off of aminet on the DSL connection and uhmm..
- I'VE BEEN RIPPED OFF! I HAVE THE SLOWEST 060 ACCELLERATOR IN THE
- UNIVERSE! The only reason I paid $1075.00 for this Amiga was because
- Apollo was supposed to be the fastest! (And Apollo _040_ accellerators
- were faster in the tests). But the Apollo boards are obviously optimized
- for 040 and suck for 060 because the Blizzard 060 cards are about 6
- megs/sec faster than the Apollo 060 cards!!!! This is terrible when using
- a gfx card! You need to be able to push as much data as possible as fast
- as possible!
-
- I could only find 1 guy on irc who had an Apollo 060 and his timing
- results were similar to mine.
-
-
- April 16, 2001:
- * Studied 060 asm coding techniques.
-
- * I checked version of every single file in my A3000 and A1200T L: DEVS: C:
- and LIBS: and copied over the files if needed. Parnet rules!
-
- I skipped copying over AHI stuff and Xpk stuff. I also didn't copy over
- some other old things that I never use or don't like.
-
- Make an lha backup of Workbench: and Work: and copy them over to the A3000
- for storage. They are on CD_Image2:A1200TBackup/ DONE.
-
- 2. Figure out how I am going to format the rest of the drive.
- A: A 700 meg Chaos: partition?
- B: All the rest of the drive as a huge GAMES: partition? OOPS!
- There is ALREADY a 1 gig GAMES: partition!
- C: Perhaps 3 700 meg partitions?
-
-
- April 17, 2001:
- It took all day to lha my A3000 Chaos: partition. Lha would work for hours
- then fail. I guess it was running out of memory or fragmenting memory so
- badly that it would fail. I deleted tons of stuff first which reduced the
- partition down to 350 megs and 100's of thousands of files. After lha
- failed I transferred over the Dev CD and the Cats CD by themselves and
- deleted them + I found 2 old temp versions of Chaos and deleted them this
- totalled many thousands of files which greatly reduced the memory needs of
- lha. Then I lha'ed the remaining stuff (Something like 290 megs) and after
- many MANY hours it finally produced a 142 meg file. I transferred the file
- over parnet while watching the season finales of Buffy and Angel.
-
- April 18, 2001:
- At Artur's request I Spent more hours reading over Chaos/audio.c and
- JCsound to see if I could see any problems. I couldn't find anything
- suspicious.
-
- April 19, 2001:
- Robin reports:
- >* BUG: Tribal Dance mod doesn't play when casting Tribal Dance.
-
- This was very strange because it had always worked for me but I finally
- figured it out. I was playing the mod CreatureName(spell) which uses the
- name of the spell IN THE CURRENT LANGUAGE. Thus the mod would not play in
- any language other than English. I have now changed it to the correct
- creature_name[spell]. NOW FIXED.
-
-
-
- * RACE! A1200T 50Mhz 060 vs. A3000 25Mhz 030
- A1200T uses IDE and A3000 uses SCSI.
- A1200T uses OS memory routines. A3000 uses Poolmem.
- Both systems are using 500 drive buffers.
- The races will be to compile the current version of Chaos.
-
- Compile a developer version of Chaos from scratch:
- A1200T 03:31 (211 seconds)
- A3000 16:05 (965 seconds)
-
- A1200T wins the race! 4.57x faster than A3000!
-
-
- Compile a release version of Chaos with full optimizations from scratch.
- A1200T 09:54 ( 594 seconds)
- A3000 52:12 (3132 seconds)
-
- A1200T wins the race! 5.27x faster than A3000!
-
- The A1200T SHOULD be a lot lot faster! But I made the mistake of buying
- the SLOWEST 060 card in the known universe (Apollo 060) which has very very
- slow memory accesses. :(
-
- If the SASC compiler was optimized to make use of the 060's dual pipeline
- I think that the 060 would perform 6x as fast as the 030.
-
-
- * Studied possible ways of using other sound cli programs and how in the
- world to know when they have finished running.
-
-
- April 20, 2001:
- Ever since I got my A1200T I've been having strange problems.
-
- 1. Ibrowse 2.2 shows garbage for its icons and default image thingys.
-
- 2. Dpaint 5 goes berserk and corrupts memory when loading any brush. It
- corrupts the mouse pointers on all screens, the gfx on the Dpaint screen
- and spews TONS of garbage all over the workbench screen. This is stupid.
-
- Everything worked perfectly on the old A3000.
-
- At first I just assumed this was a bug in OS 3.9 but now I have proved that
- it is a bug in cybergraphics.library.
-
- NOTE: I AM NOT USING CYBERGRAPHICS.LIBRARY! I HAVE OPENED 0 SCREENS ON THE
- GFX CARD! I AM NOT USING THE LIBRARY IN ANY WAY!
-
- But just _HAVING_ the ElboxVirge monitor driver in my devs:monitors/ causes
- cgfx to do evil patches to my OS which corrupt all my AGA software!
-
- I have now removed the ElboxVirge monitor driver and now all my AGA
- programs are working perfectly.
-
- At the moment there is NO WAY to have AGA and my gfx card coexist 100%! :(
-
- I must do EVERYTHING on AGA or EVERYTHING on cgfx. THIS TOTALLY SUX!
-
- I need to be able to, in the future, run Ibrowse and workbench on the gfx
- card to save tons of chipram while running Dpaint 5 and Chaos on AGA.
-
- Ok, I found the problem: There are some env: variables that control certain
- patches of cybergraphics.library. Some of the patches are called
- Planes2Fast, Supergels and SuperLayers. Manius says Planes2Fast was
- causing this problem. It makes sense so all I have to do is turn off these
- patches to make things work correctly.
-
-
- * I studied the proposed new 256 color palette and did various tests and
- made observations.
-
- * I made a new version of JCsound based on FD's theory for the audio.device
- bugs. (v1.4x x=eXperimental) Sent it to Artur for testing.
- Robin and Artur report that it works perfectly in the shell in mono in a
- 15.75Khz screenmode but that it does not work in a 30Khz screenmode with
- the -2 option.
-
- April 21, 2001:
- * I made a proposed AGA palette alpha version 1 with 125 defined colors
- which contains all the existing ECS colors + more shades. Sent it to
- Xav and Robin for comments, complaints, criticisms, etc.
-
- * I made yet another new version of JCsound with some changed code for the
- -2 option. (V1.4x1) Sent it to Artur and Robin. Now I made 1.4x2 and
- sent it to them. They report this one works perfectly.
-
- * The final bug in JCsound was that I was doing CMD_WRITE to the left
- channel then to the right channel. So I just assumed that the left channel
- would finish first and the right channel would finish last. But some times
- (all the time?) the buffers finished in reverse order! So JCsound would
- get a signal from the right port FIRST then a little later a signal would
- arrive from the left port. If the signals had arrived in the correct order
- or AT THE SAME TIME as I assumed then things would have been working
- perfectly for a long time. Anyway its all NOW FIXED.
-
- {}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
-
- * NEW GFX FROM IMBE!
- I put the following gfx into gfx/UnusedGfx/Imbe/
- brightcreature.incomplete
- Hand Grenade
- Halfling (He looks very evil. He looks undead. Perhaps this could be an
- evil halfling? Or some sort of undead creature?
- Haste
- Gryphon: I think this gfx looks too big and bulky to be a Gryphon.
- I am renaming this to Gargoyle Wings this can be the Gargoyle
- creature when it has been hit with a Fly spell. We still need a
- standard version without the wings and someone needs to design the
- stats and abilities of a Gargoyle creature.
- Wizard 4.incomplete: Why is this incomplete? Hmm...
- On the one hand I like it like it is
- On the other hand I like the current Wizard 4 flying around guy
- On the third hand the flying wizard guy could be a Genie of some sort.
- On the fourth hand this Wizard 4.incomplete looks like he is made of
- clay so I don't know what to do with him. Since Imbe says he is
- incomplete I will just put him into gfx/UnusedGfx/Imbe/ for now.
-
-
-
- INCLUDED These gfx:
- Alliance: I antialiased it a little bit and included it + sent it to Xav
- so he can manufacture a new Separation based on this.
- Wizard 1: Hopefully Xav can anti-alias the wand for me. :)
- Note to Imbe: What is that yellow stuff doing to him? It
- looks like his magic orb is attacking him. :) Or maybe his
- spell is backfiring on him?
- Wizard 2: Very nice! Very good rotation!
- Wizard 3: Very nice!
- Wizard 8: CowaFreakinBunga! I put the "old" Wizard 8 into
- gfx/UnusedGfx/Imbe/ just in case.
-
-
-
- I'm still deciding what to do with:
- Harpy: It looks very cool. But I'm unsure if this should be a Harpy or
- a Bird Lord or ???
- Wizard 7: It looks great. But so does the current Wizard 7. What am I
- to do?
-
-
- CellEffect/heal.incomplete I like this. I am planning to use it for
- Heal, Recover Boost, Brain Boost, etc.
-
- {}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
-
- April 22, 2001:
- Today was the first day that I played Chaos on the A1200T AGA. Ack!
-
- 1. Hires monitor
- I've been playing Chaos on a 1084S monitor with .42mm dot pitch for years.
- The gfx look nice. But on my Commodore 1960 monitor with .28mm dot pitch
- the gfx look very bad. You can see each and every square pixel. Yuk. The
- AGA version FOR SURE needs 640x512 resolution to counteract this problem.
-
- 2. Sprite corruption
- For some reason loading Chaos corrupts the mouse sprite on all my other
- screens. I guess the OS can't handle 1 task using a lores sprite and
- another task using a hires sprite. It looks horrible! How do I fix
- this??? Or should I just wait till the game opens AGA screens and then the
- problem will automatically disappear?
-
- 3. The first time I load Chaos the intro screen is in NTSC, which is wrong.
- The next time I load Chaos the intro screen is in PAL. The intro screens
- are still being opened using the lame old OS 1.3 routines. I have now
- rewritten the intro screens to open using the OS 3.0 OpenScreenTags()
- like alll the other screens in the game. NOW FIXED.
-
- * Investigated other theoretical problems in JCsound but couldn't find
- anything wrong.
-
- * I did FD's suggestion to do the CloseDevice() related code in perfect
- reverse order. This didn't seem to make any actual difference but it might
- in the future and I added code to check for this and report any messages
- returned from CloseDevice() into T:JClogfile.
-
- April 23, 2001:
- * Spent all day talking to programmers about gfx card programming
- techniques and how to make programs residentable. It turns out that
- making a residentable program is TOTALLY EASY in SASC!!!
- But the only example resident program I had ever looked at was a real
- pain because everything had to be rewritten to a more complicated syntax.
- This example program was obviously made for use with inferior compilers.
-
- April 24, 2001:
- * I released v1.5 of JCsound with proper Stereophonic playback support and
- extra error checking and fully residentable for playtesting.
-
- * UPDATED Chaos to quit running JCsound from the RAM:c/ dir and to use the
- resident version instead. This saved 216 bytes on the size of the
- executable.
- JCSOUND RESIDENT ADVANTAGES:
- Loads faster! (Actually it doesn't load at all! It is already loaded!)
- Can run 4 copies of it at the same time without burning any extra code
- memory.
-
- * UPDATED the documentation to include info about the Blood option.
-
- April 25, 2001:
- * BUG: when creatures come into being who belong to a dead computer wizard,
- the human gets to control them! The computer should control these
- creatures! NOW FIXED.
-
- * ELIMINATED ram:ChaosDir/ It is no longer used.
-
- * MODIFIED the speech system with error checking similar to that used by
- JCsound then played half a test game. No bugs detected. But I did hear
- certain sound effects start with unsynchronized left/right channels.
- The speech sounded wierd a few times also.
-
- April 26, 2001:
- * AUTOSAVING is very fast on 50Mhz 060!
-
- * ENFORCER won't work on my 060!!!! Aaauuggh!!!! This sux! Chaos will
- start becoming very badly bugged without enforcer running! I assume this
- is caused by RemApollo. (?)
-
- * Multitasking speech added. When you click on a monster and speech is
- activated the speech plays in the background (asynchronously).
- I played a test game and it works perfectly.
-
- * BUG: After casting Seismology the Heal spell sets your feel range,
- smell range and hear range to 7.1! NOW FIXED.
-
- April 27, 2001:
- ------------------------------------------------------------------------
- Robin's New CellEffects:
-
- CastFlames: Included as Fireball1. This is currently only used when
- casting a Fireball onto something. Should it be used for anything else?
- Its very long (over 100 frames) and I'm running out of chipram so I
- shortened it down to just a few frames.
-
-
- CastGfx: Looks wild! I must use this for something! But what?
- I'm putting it into UnusedGfx/Robin/ for the moment.
-
- CastGood: Included as DemonicDoorway. This is used when casting a
- demon/devil/higher devil/elemental.
-
- DemonID,DevilID,HDevilID,FDemonID,EFireID,EAirID,EWaterID,EEarthID,
- GrimReaperID
-
-
- CastRing:
- I'm including the Green one as Toxicity. This effect will be used by all
- the "Beam" spells. (Lethargy Beam, Toxicity Beam, etc.) All of them except
- Plasma Beam.
-
- There are many other nice looking CastRing fx!
- I don't know what to use the other castrings for!?!?! aaaahg!
- They are residing in UnusedGfx/Robin/
-
-
- CastWarp: Included as UncertaintyAppearance (I can't think of anything
- else to call it.) I removed the ending frames. I antialiased the circles.
- This is now used by the Uncertainty spell when new creatures magically
- appear onto the board. This one worked out really well!!!!
- -------------------------------------------------------------------------
-
- Put in Imbe's heal fx as "HealingSpell" for:
- Recover Boost
- Brain Boost
- Heal
- Magic Shield
-
- Any others?
-
- * Played a test game to test all the new cell effects. Everything seems to
- work perfectly.
-
- * There are now 2353 tiles in the game consuming 451K of chipram! That's
- just for the tiles! That doesn't count GUI images, sprites and screen mem.
- And remember I left out 80 of Robin's fire tiles to save 15K of chipram.
- This is a very good reason to start the AGA version development because
- the AGA version will store all tiles in fastram.
-
-
- April 28th, 2001:
- * I spent most of the day playing a full complete game of Chaos. I didn't
- win until turn 62. I played against 7 Ruthless computer wizards who were
- in an alliance against me in a dungeon of Force Walls with 4 generators and
- 10 scrolls. Exploration mode was off. It was really hard. They kept
- ganging up on me. 2 Wizards on the opposite side of the board from me kept
- casting horrible spells against me because one had an Oracle and the
- otherer had Depth! I had no way to stop them! I lost a LOT of creatures
- in this game!!! One time they cast Ditzy Blonde on my undead Emerald
- Dragon. I just _knew_ they were going to cast subversion on it the next
- turn so I had to cast Brain Boost on my Emerald Dragon. And sure enough,
- as soon as I clicked on my Emerald Dragon and the gfx effect was over, the
- evil enemy wizard tried to subvert my Emerald Dragon!! Its been months
- since I bothered to cast a Brain Boost; I'm really glad I did this time!
-
- I won with 1972 points. The opposing team had about 2500 points. They
- killed a lot of stuff including many Force Walls.
-
- The sounds acted strange sometimes; sometimes the sound would start playing
- on the left and the right but then one channel would stop partway through
- and only the other channel would play the rest of the way. I have no idea
- how this can be possible.
-
- No real bugs to report.
-
- April 29th, 2001:
- ************************************************************************
- 100% TRANSLATIONS UPGRADE
- ************************************************************************
-
-
- I was originally going to have lists with "M" and "F" variations but I
- think there is a shortcut if we use "" for male and "e" for female. This
- will shorten and simplify the catalog lines.
-
- If you don't like it then you can make your own system.
-
- This is just an example of 1 possible way to do things. I'm sure there are
- many other ways that are just as good, or better, than this way.
-
-
- PERFECT FRENCH TRANSLATIONS!!!!!!!!!!!!!!!!!
-
- BEGIN_LIST {GENDEROFLoup}
- *
-
- BEGIN_LIST {GENDEROFHarpie}
- e
- *
-
- BEGIN_LIST {SUBJECTGENDER}
- Le
- *
-
- BEGIN_LIST {OBJECTGENDER}
- un
- *
-
- BEGIN_LIST {SUBJECTGENDERe}
- La
- *
-
- BEGIN_LIST {OBJECTGENDERe}
- une
- *
-
- {SUBJECTGENDER{GENDEROF%2$s}} %2$s de %$1s est promu{GENDEROF%2$s} en {OBJECTGENDER{GENDEROF%3$s}} %3$s
-
-
-
- BEGIN_LIST {dissous}
- dissous
- *
-
- BEGIN_LIST {dissouse}
- dissoute
- *
-
- In French you could return "e" for female and "" for male
- (GENDEROF function). This would be a shortcut.
-
- In this way you don't have to list EVERY verb into the talklists file,
- only the "irregular" ones.
-
-
-
- THIS PROPOSAL REQUIRES:
- 1. NULL lists MUST be handled properly! They should return a pointer to a
- NULL string! (first byte of the string is 0) DONE.
-
- 2. There is a bug in OS RawDoFmt() which means that you cannot supply a
- format string which only uses some of the format paramters!
- Tsprintf(text_store, "%1$s %2$s","P1","P2","P3"); freaks out and doesn't
- work! I found this out when working on Robin's scavenging texts. One
- of his paramters (%3$s) is NOT in the orignal catalog file! It is contained
- in the talklist file! This SHOULD work perfectly but it doesn't. I hacked
- around this bug by simply doing ReplaceLists() first then plugging in the
- parameters.
-
- 3. Strangely you can supply the same parameter over and over as in:
- Tsprintf(text_store,"%1$s %3$s %3$s %2$s %1$s","J1","J2","J3");
- I tested this a few different times and it always seems to work.
-
- 4. I modified ReplaceLists() to 100% handle nested lists.
-
- 5. The code in Chaos that builds the spell description lists must also
- build a talklist file with all creatures and genders. This file is
- stored in the TalkListsDir/ DONE.
-
- 6. Add in some code to read the gender byte from description files.
- If there is no gender byte just assume NULL. ("") DONE.
- For some reason I coded this in such a way that the gender info can only
- be 1 byte. This byte may be omitted. If this is a problem then let me
- know.
-
- 365 different
- BEGIN_LIST {GENDEROFSnake}
- e
- *
-
- BEGIN_LIST {GENDEROFGreen Dragon}
- *
-
-
- PLEASE NOTE: In order for this new fancy perfect translations thing to
- work I must add a hunk of code to each individual place in the program that
- makes use of it. At the moment I have only added this code to the
- scavenging string (Line 49). Once someone has tested this new system and
- verified that it actually works then I can add the code hunk to all the
- other needed catalog lines. This code hunk uses a variable number of
- parameters and I have no idea how to code a routine to work with it. I'm
- not sure it is possible to reduce this into a subroutine. Perhaps Sean
- should look at this.
-
- ************************************************************************
- END 100% TRANSLATIONS UPGRADE
- ************************************************************************
-
-
- April 30, 2001
- I downloaded Multiplayer and Hippoplayer from Aminet then I listened to
- each protracker song to figure out if it was messed up or not. The problem
- is that the protracker replay routine in Chaos is _VERY_ old and it is not
- 100% 060 compatible because it doesn't wait long enough after issuing a
- write to the audio hardware for it to take effect. The easy solution is
- simply to convert any wrong-sounding protracker mods to med format:
-
-
- 1
- 17 is messed up around 34-36 convert it! This mod somehow shrank from
- 406K->401K when I converted it to MMD1 format. Strange.
- 20 is messed up!
- 21 is messed up at pattern 30!!
- 23 is messed up in the beginning and all over!
- 32 is messed up at the end (fade out doesn't fade out).
- 36 I think is messed up in patterns 4-6 the "wooh" instrument isn't fading
- out? I'm not sure about this. I'll just convert it to be safe.
- This reduced the filesize from 292K->284K. Strange.
- 37 is messed up right from the beginning.
- 40 is messed up an instrument doesn't fade out correctly. Then around 5 it
- messes up really badly!
-
-
- 51 is totally messed up! Convert this to med then TEST IT!
-
- 58 fades in all wrong and sounds terrible!
- 59 is messed up.
-
- I installed OctaMed SoundStudio Professional v1.03c onto the A1200T to
- convert the mods. All above mods converted and tested. NOW FIXED.
-
-
- 41 WHAT THE HELL!?!? This is the artifact/scavenging music but its in
- protracker format with no subsongs!?!?!? Recover this from my A3000!!!!
- Find #42 in an old version! DONE. FIXED.
-
-
- Test if Subsongs work correctly now that I have fixed JCsound (?)
- Luckily I left all the old subsong/jcsound testing code in the game but
- commented out. I will just uncomment it now and give it a whirl.
-
- Hmmm... well... Sometimes the ghost sound starts out VERY unsynchronized
- immediately after playing a subsong. But no permanent damage seems to be
- done.
-
- * RISKY MANEUVER: I am taking out the hacked code to work around the
- "subsong followed by JCsound crashes bug" since it seems to work ok now.
- This will solve the glitchy sound at the end of every subsong.
- Subsongs are only used for scavenging and artifact changing.
-
- * Updated the credits section of the docs.
-
-
- May 2, 2001:
- * Conduct a test: Run the ElboxVirge cybergraphics driver then play Chaos
- and load and save the game to see if everything works or not. It seems to
- work ok but I didn't play very long.
-
- * Included Imbe's Harpy.
-
- * BUG: The new 100% translations code is crashing when I select a
- nonexistent language such as Italiano. NOW FIXED.
-
- * Compiled version 3.3. Main executable = 434552 bytes.
-
- * Updated the ChaosHeavy.readme and sent it off to be translated.
-
-
- Thursday May 3, 2001: WILD stuff on the news today!!!!!!!!!
-
- * Included Artur's new Polski SetupScreen2.iff and Polski.catalog.
-
-
-
-